Spring Social Google 登录错误后返回

Posted

技术标签:

【中文标题】Spring Social Google 登录错误后返回【英文标题】:Spring Social Google return after login wrong 【发布时间】:2015-05-07 04:33:21 【问题描述】:

我已经为 Facebook、Twitter 和 Google 实现了 Spring social。 对于前 2 个,它可以工作,但 Google 在您允许我的应用程序访问您的 google+ 帐户的 google 页面上接受后将用户重定向到 /signin。 /signin 是 404。如果我为 /signin 创建页面,则显示页面但用户未登录。

我熟悉 connectController 和 GoogleConnectionFactory 的底层机制,但我相信它应该将请求重定向回它的来源并使用访问令牌。我相信这是/auth/google。我尝试了从 /signin 到 /auth/google 的重定向,但没有成功。正如 Twitter 和 Facebook 所述,没有问题。

代码: 公共类 SocialConfig 实现 SocialConfigurer

@Override
public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) 
    cfConfig.addConnectionFactory(new FacebookConnectionFactory(
            env.getProperty("facebook.app.id"),
            env.getProperty("facebook.app.secret")
    ));
    cfConfig.addConnectionFactory(new TwitterConnectionFactory(
            env.getProperty("twitter.consumer.key"),
            env.getProperty("twitter.consumer.secret")
    ));
    cfConfig.addConnectionFactory(new GoogleConnectionFactory(
            env.getProperty("google.app.id"),
            env.getProperty("google.app.secret")));


@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) 
    return new ConnectController(connectionFactoryLocator, connectionRepository);

SecurityConfig.java

.apply(getSpringSocialConfigurer()); //to http.

private SpringSocialConfigurer getSpringSocialConfigurer() 
    SpringSocialConfigurer config = new SpringSocialConfigurer();
    config.alwaysUsePostLoginUrl(true);
    config.postLoginUrl("/");

    return config;

jsp。

  //facebook
                <a href="$pageContext.request.contextPath/auth/facebook" class="hidden-xs">
                    <img src="<c:url value="/static/img/fb-login.png"/>" />      
                </a>

//twitter
                <a href="$pageContext.request.contextPath/auth/twitter" class="hidden-xs">
                    <img src="<c:url value="/static/img/twitter-login.png"/>"  />      
                </a>
 //google
            <form name="go_signin" id="go_signin" action="<c:url value="/auth/google"/>" method="POST" class="float-left">          
                <div onclick="this.parentNode.submit();">
                    <img src="<c:url value="/static/img/google-login.png"/>" />      
                </div>
                <input type="hidden" name="$_csrf.parameterName" value="$_csrf.token" />
                <input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.login" /> 
            </form>

在谷歌应用程序控制台中,我将重定向 URI 设置为:my_url/auth/google 和 javascript 起源只是我的网址。 我几乎尝试了所有组合。在您进入 google 登录页面之前,除了 /auth/google 之外的任何内容都会导致重定向 uri 不匹配错误

欢迎任何想法,提前谢谢。

【问题讨论】:

您必须更改 Google 控制台中的设置以允许使用什么 redirect_uri,但随后您必须在代码中的某个地方配置 redirect_uri 实际应该是什么。文档可能在某处说。 我添加了 PostLoginURL 并尝试将其设置为以下形式: 但确实如此不行。 Google Docs 说了以下内容,但在我的情况下似乎没有这样做:用户授权您的应用程序后,他们将被重定向到您的 /oauth/ url。在那里您将收到一个“代码”参数。您可以将该代码交换为访问令牌:这是一个应处理身份验证的 SpringSocialController。 你解决过这个问题吗?我有同样的问题。首次登录后,谷歌将我重定向到 /signin 而不是 /singup 有什么解决办法吗? 【参考方案1】:

这个项目有一个很好的使用 spring-social-google 的工作示例:https://github.com/GabiAxel/spring-social-google-example

【讨论】:

我正在实施本教程:petrikainulainen.net/programming/spring-framework/… 我只需要登录功能。我查看了该项目的源代码。文档说登录控制器注册 POST /signin/providerId,我得到 404。【参考方案2】:

我有类似的问题,登录后,重定向到 /signin,但它不是由谷歌执行的,而是由 Spring Social Google 插件执行的。它将 GET 请求发送到 https://www.googleapis.com/plus/v1/people/me,只有在 Google 控制台中为您的应用程序启用 Google+ Api 时才能调用该请求。

redirect_uri 应该是 /auth/google

https://github.com/GabiAxel/spring-social-google/issues/22 讨论了此问题。在未来的版本中,它将被修复。

【讨论】:

【参考方案3】:

将 pom.xml 中的 spring-social-google 版本更新到 1.0.0.RC1 解决了我的问题。

【讨论】:

以上是关于Spring Social Google 登录错误后返回的主要内容,如果未能解决你的问题,请参考以下文章

Spring Social:当服务器在代理后面时重定向 url

Spring social NoSuchMethodError SocialAuthenticationFilter.getFilterProcessesUrl()

如何通过 REST API 为 Spring-social 和 spring-security 设置登录服务?

使用Spring Social,Spring安全登录后重定向到原始URL?

使用现有用户访问令牌使用 Spring Social 登录 Facebook

使用spring social开发第三方登录