这种登录流程是否可行?

发布于 6 年前作者 yaoming17480 次浏览最后编辑 6 年前来自 ask

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

6 回复
zhujun
zhujun1 楼6 年前

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

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

jieyan
jieyan2 楼6 年前

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

zhangxiuying
zhangxiuying3 楼6 年前

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

xieyang
xieyang4 楼6 年前

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

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

yang29
yang295 楼6 年前

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

xiangyan
xiangyan6 楼4 年前

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

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