2017-06-05 44 views

回答

0

当您实现自己的登录适配器时,您可以选择从身份提供商处获取用户配置文件,并且您可以验证电子邮件地址。这里返回字符串表示的URL重定向到,所以当他们的电子邮件地址的域名不匹配,你可以将它们重定向到一个错误页面没有签到他们。

@Component 
public class SocialSignInAdapter implements SignInAdapter { 

    private final UserDetailsTransformer userDetailsTransformer; 

    @Autowired 
    public SocialSignInAdapter(UserDetailsTransformer userDetailsTransformer) { 
     this.userDetailsTransformer = userDetailsTransformer; 
    } 

    @Override 
    public String signIn(String localUserId, Connection<?> connection, NativeWebRequest request) { 
     if (connection.fetchUserProfile().getEmail().matches("^.*@googledomain.com$")) { 
      SecurityContextHolder.getContext().setAuthentication(
        new UsernamePasswordAuthenticationToken(
          userDetailsTransformer.convert(connection), null, 
          Arrays.asList(new SimpleGrantedAuthority(String.format("%s_USER", connection.getKey().getProviderId()))))); 
      return "/"; 
     } else { 
      return "/some-error-page"; 
     } 
    } 
} 
+0

感谢您的答复。我会检查它,并让你知道:) – Kishan

+0

我有一个正在进行的项目,其中有春季社交,所以我在那里测试它。解决方案可能比这个更小。 – Tacsiazuma

+0

我已经尝试过这个解决方案,但问题是我想要在登录谷歌之前正确的电子邮件地址! 我们可以在谷歌域端设置一些验证吗? – Kishan