收藏
回答

微信登录与web-view内网站登录的问题

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 需求 web-view 工具 6.7.0 2.1.1

各位好!


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


我们的小程序需要用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 个回答

  • 一只圆号🎺
    一只圆号🎺
    2018-07-31


    第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

    2018-07-31
    有用
    回复
登录 后发表内容