请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

微信登录如何同时保存openId和unionId

老师您好!
如果同一个微信账号,在同一个网站上,要使用以下两种登录方式:
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。

正在回答 回答被采纳积分+3

1回答

JoJo 2019-04-28 21:01:24

暂时想不到,因为unionId是微信特有的东西,并不是OAuth协议里的标准字段。。。

0 回复 有任何疑惑可以回复我~
  • 提问者 Jaye4347439 #1
    我取消了依赖 spring social 项目,模范手机验证码登陆的方式,重新写了整个社交登陆的代码
    回复 有任何疑惑可以回复我~ 2019-05-09 15:32:10
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号