各位好!
我们目前有一个需求场景如下:
我们的小程序需要用web-view打开我们的网站 https://www.wecard.org.cn, 同时我们也希望能帮助小程序用户自动的登录我们的网站.
我的思路如下:
我们在登录小程序时,通过微信授权,拿到unionId
在打开web-view时,通过url参数将unionId传入网站比如(https://www.wecard.org.cn/login/?unionId=xxxxxx)
网站端接收unionId后,与后端交互,并返回一个token,用作用户在线凭证.
考虑如下一个场景:
当我用web-view内打开并登录网站后,这时候我跳转到了一个页面(比如https://www.wecard.org.cn/order)
这时候,我通过小程序右上角的分享,转发到了 好友或群 中. 分享参数携带了当前网页.
onShareAppMessage(options) { console.log(options.webViewUrl) var url = options.webViewUrl; url = encodeURIComponent(url); url = 'pages/web-view/web-view?url=' + url; |
QUESTION: 然后这时候某一个好友打开了我分享过的小程序,这时候他的登录逻辑应该如何实现呢?
我的一个设想:
1. 我先保留webViewUrl到localstorage,然后判断是否授权,如果没有我就引导用户点击getUserInfo那个button
然后授权过后,我再用web-view打开刚才的网站.
2. 现在用户没有token,我要先去访问https://www.wecard.org.cn/login/?unionId=xxx 完成该用户的网站登录,拿到token,
然后我再去访问刚才localstorage保存的webViewUrl.
但是不知这样的逻辑是否可操作,或者有更好的逻辑?
谢谢各位!
第2步的流程不合理,使用unionId去获取token有极大的安全隐患。
我个人建议的流程是这样的
wx.login()获取code,将code上传至后端
(1)若用户已授权,后端根据code从微信服务器获取openid及unionid,并返回token
(2)若用户未授权,button 拉起 wx.getUserInfo进行用户授权,成功之后重新进行第1步
2.将token作为参数拼接在url后,打开webview,web页面提取token并进行验证
3.若页面被分享,用户通过分享进入。先执行第1步,成功后进行第2步。即在webview页面,先进行用户登录状态的检测,再加载url