spring-social Facebook登录不设置Authentication对象

时间:2016-11-21 03:31:12

标签: facebook spring-mvc facebook-graph-api spring-security spring-social

我正在使用Facebook登录在我的应用程序中进行身份验证。我使用身份验证过滤器。

身份验证正常,但是当它重定向回主页时,过滤器似乎没有设置Authentication对象,因此调用SecurityContextHolder.getContext()。getAuthentication()将返回null。这仅在用户第一次授权我们的应用时发生。之后不会发生这种情况。

目前,要设置Authentication对象,用户必须“两次登录facebook”。第二次它实际上没有进行任何登录,过滤器看起来像是拿起cookie并进行身份验证,甚至不再需要去Facebook了。

所以我的问题是为什么我需要经过两次过滤器?或者我该如何避免这种情况?

配置如下所示:

AddOrUpdate

1 个答案:

答案 0 :(得分:1)

看起来Spring并没有处理它自己的问题,虽然我觉得它应该可以用于配置,而不是必须为它编写代码,但这有点意义。无论如何,这是我们如何做到的:

@RequestMapping("/signup")
public String signUp(WebRequest request) {
    Connection<?> connection = providerSignInUtils.getConnectionFromSession(request);
    User user = usersConnectionRepository.createUser(connection);
    getRepository().save(user);
    providerSignInUtils.doPostSignUp(user.getId().toString(), request);
    // the following will automatically log in the user after sign up
    SecurityContextHolder.getContext().setAuthentication(new SocialAuthenticationToken(connection, user, null, user.getAuthorities()));
    return "redirect:/home";
}