- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解 ProviderSignInController 是做什么的,但我很难理解它。
因此,当我单击使用 facebook 登录时,我会转到 facebook 登录页面,然后在输入我的凭据后调用以下方法
org.springframework.social.connect.web.ProviderSignInController.oauth1Callback(String, NativeWebRequest)
/**
* Process the authentication callback from an OAuth 2 service provider.
* Called after the user authorizes the authentication, generally done once by having he or she click "Allow" in their web browser at the provider's site.
* Handles the provider sign-in callback by first determining if a local user account is associated with the connected provider account.
* If so, signs the local user in by delegating to {@link SignInAdapter#signIn(String, Connection, NativeWebRequest)}.
* If not, redirects the user to a signup page to create a new account with {@link ProviderSignInAttempt} context exposed in the HttpSession.
* @see ProviderSignInAttempt
* @see ProviderSignInUtils
*/
@RequestMapping(value="/{providerId}", method=RequestMethod.GET, params="code")
public RedirectView oauth2Callback(@PathVariable String providerId, @RequestParam("code") String code, NativeWebRequest request) {
try {
OAuth2ConnectionFactory<?> connectionFactory = (OAuth2ConnectionFactory<?>) connectionFactoryLocator.getConnectionFactory(providerId);
Connection<?> connection = connectSupport.completeConnection(connectionFactory, request);
return handleSignIn(connection, connectionFactory, request);
} catch (Exception e) {
logger.error("Exception while completing OAuth 2 connection: ", e);
return redirect(URIBuilder.fromUri(signInUrl).queryParam("error", "provider").build().toString());
}
}
最佳答案
您的理解并不完全准确。 ProviderSignInController 工作的典型方式是您描述的方式。它的工作原理是首先获得 Facebook(或它正在处理的任何提供商)的用户授权,然后使用该授权来获取用户的 ID。然后它将用户的 ID 与先前建立的连接(可能使用 ConnectController 建立)进行比较,并验证与该连接关联的用户。在这种情况下,必须有一个现有用户,并且该用户之前必须已经与 Facebook 建立了连接。
如果没有找到匹配的连接,那么它会提供应用程序的注册/注册屏幕供用户注册您的应用程序。 (这假定用户尚未注册。)注册后,应用程序可以选择完成连接……即为新注册的用户创建新连接。它通过在 ProviderSignInUtils 上调用 postSignUp() 来做到这一点。 Spring Social Showcase 在 SignupController 中执行此操作:https://github.com/spring-projects/spring-social-samples/blob/master/spring-social-showcase/src/main/java/org/springframework/social/showcase/signup/SignupController.java .
但是,还有另一种方法,它不需要现有的连接,也不需要您的应用程序甚至维护用户数据库。这种方法称为“隐式注册”,这意味着通过 Facebook 授权,用户隐式注册到您的应用程序。要使用隐式注册,您必须将 SignInAdapter 的实例注入(inject) JdbcUsersConnectionRepository。要查看实际情况,请查看 SocialConfig.java 中的 Spring Social 快速入门示例:https://github.com/spring-projects/spring-social-samples/blob/master/spring-social-quickstart/src/main/java/org/springframework/social/quickstart/config/SocialConfig.java .
请注意,当前实现的隐式注册是 JdbcUsersConnectionRepository 的功能,而不是更通用的 UsersConnectionRepository。这很不幸,因为这意味着该功能只能在您使用 JdbcUsersConnectionRepository 或者您使用的任何 UsersConnectionRepository 实现支持它的情况下使用。这困扰了我一段时间,所以我创建了 https://jira.spring.io/browse/SOCIAL-439来解决这个问题。
关于spring - 根本无法理解 Spring 社交,尤其是 ProviderSignInController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854092/
我是一名优秀的程序员,十分优秀!