微信登录如何同时保存openId和unionId
来源:5-6 处理注册逻辑

Jaye4347439
2019-04-11
老师您好!
如果同一个微信账号,在同一个网站上,要使用以下两种登录方式:
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。
1回答
-
JoJo
2019-04-28
暂时想不到,因为unionId是微信特有的东西,并不是OAuth协议里的标准字段。。。
012019-05-09
Spring Security技术栈开发企业级认证与授权
2662 学习 · 1561 问题
相似问题