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?