收藏
回答

这种登录流程是否可行?

问题模块
API和组件

调用wx.login,后台进行一系列操作后,返回小程序一个数据库自增的id,保存到小程序本地,没有过期时间。之后的业务逻辑都是用这个id与后台交互,这样就没有用到官方流程里的3rd_session之类的,请问这种方式可以吗?有什么不足吗?

最后一次编辑于  2017-06-30  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

6 个回答

  • maq
    maq
    2017-06-30

    缓存不通用就安全了,可以把 session id 长期缓存,以减少 wx.login 的次数。不过也不宜太长,否则昵称、头像更改会很难反映出来。

    2017-06-30
    赞同
    回复
  • Caesar王文龙
    Caesar王文龙
    2017-06-30

    刚试了切换账号登陆,两个账号的缓存不是互通的。

    你说的这个登陆流程我之前试过,但是这样用户每次打开小程序都需要登陆一次,接口返回特别慢,我的方法是直接把用户id存到本地缓存,用户进来检查是否存在id再决定是否登陆

    2017-06-30
    赞同
    回复
  • maq
    maq
    2017-06-30

    忽然想到一种非典型的应用场景:如果一部手机上微信用户注销后用另一个微信帐号登录,此时“小程序保存在本地的 id”会不会是同一份呢?如果是的话就有问题了,相当于两个不同的微信用户被当做了同一个小程序用户。


    我在小程序里的做法是:小程序启动的时候调用一次 wx.login,在服务器端根据 openid 生成对应的 session id,在小程序端以内存变量的方式来缓存这个 session id,从不调用 wx.checkSession,只要缓存有效就不再调用 wx.login。

    2017-06-30
    赞同
    回复
  • maq
    maq
    2017-06-30

    wx.login 的目的无非是拿到 code 并进而得到 openid, nickName, avatarUrl 这些,openid 是一成不变的,如果你也不在意昵称、头像的修改,那其实就没啥必要再次调用 wx.login,当然也就不需要 wx.checkSession 了。

    2017-06-30
    赞同
    回复
  • Caesar王文龙
    Caesar王文龙
    2017-06-30

    @maq: 那这么说就不需要checksession这个方法了吧?

    2017-06-30
    赞同
    回复
  • maq
    maq
    2017-06-30

    你这个 id 已经就是“官方流程里的3rd_session”了。


    数据库自增的 id 不好,太容易伪造了,应该用一种可校验的加密字符串,比如 PHP 里可以用著名的 authcode()。

    2017-06-30
    赞同
    回复 1
    • 全赖有你
      全赖有你
      08-28
      那后端用guid返给前端没什么问题吧?
      08-28
      回复