老师您好!
如果同一个微信账号,在同一个网站上,要使用以下两种登录方式:
1.PC端的微信扫码登录。
2.手机微信浏览器中的微信服务号授权登录。
这两种方式,不属于同一种第三方登录,会有不同provideId和appId,同时他们获取的openId也不同,不过他们会有一个相同的unionId进行关联,样例代码WeixinUserInfo类里面也有unionId字段。
目前我遇到的问题是,在保存userconnection的时候,同时需要保存openId和unionId。查询用户的时候也同时查询openId和unionId。如果我只需要考虑登录,可以只记录unionId,但是一些其他业务,可能需要使用到openId。我研究了一下代码,需要重写JdbcUsersConnectionRepository 和 JdbcConnectionRepository。但是仅仅重写这两个类还不行。在微信用户注册之前,需要把openID等信息记录在session中,即在SocialAuthenticationFilter中下面这一行。
sessionStrategy.setAttribute(new ServletWebRequest(request),
ProviderSignInAttempt.SESSION_ATTRIBUTE, new ProviderSignInAttempt(token.getConnection()));
记录到session里面的数据就没有unionId。我大致的看了一下,如果要同时记录openId,unionId需要重写的类很多,包括有 ConnectionData,ProviderSignInAttempt,SocialAuthenticationFilter,JdbcUsersConnectionRepository,JdbcConnectionRepository等等。这样是不是太麻烦了。有没有什么比较简单一点的办法,同时记录openId和unionId。
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
了解课程