微信登录与web-view内网站登录的问题
发布于 6 年前 作者 yan82 15575 次浏览 来自 问答

各位好!


我们目前有一个需求场景如下:

我们的小程序需要用web-view打开我们的网站 https://www.wecard.org.cn, 同时我们也希望能帮助小程序用户__自动的登录__我们的网站.

我的思路如下:

  1. 我们在登录小程序时,通过微信授权,拿到unionId

  2. 在打开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.

但是不知这样的逻辑是否可操作,或者有更好的逻辑?

谢谢各位!

1 回复

第2步的流程不合理,使用unionId去获取token有极大的安全隐患。

我个人建议的流程是这样的

  1. 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

回到顶部