在说登录之前,可以先检测是否是登录状态
wx.checkSession() :检查登录态是否过期
wx.checkSession({
success() { // session_key 未过期,并且在本生命周期一直有效 },
fail() { // session_key 已经失效,需要重新执行登录流程 wx.login() // 重新登录 }
})
登录
登录就是要让开发者服务器知道当前的用户是谁,通常我们开发登录功能,都是要让用户输入账号和密码才能实现登录操作。在微信小程序中,我们可以通过微信服务器来完成这个操作,获取到与当前用户对应的唯一标识(openId)。
注意:每个用户相对应于每个微信应用的openId是唯一的,也就是说一个用户相对于不同的微信应用会存在不同的openId
从上图中,我们可以看出,小程序要想实现登录的几步:
一、调用wx.login()
小程序前端使用wx.login()从微信服务器获取code
二、从微信服务器获取openid
将获取到的code发送给开发者自家的服务器,服务器利用appId、appSecret和code向微信服务器换取用户openId和session_key
三、开发者服务器自定义登录态并将其与openId 和session_key 关联起来然后写session
四、开发者服务器将登录态返回给小程序前端,小程序前端使用wx.setStorageSync() 将登录态保存起来
五 、小程序端 wx.getUserInfo 获取用户信息 + wx.getStorage 获取 3rd_session 数据后,发送给开发者服务器,以便开发者服务器知道当前操作的用户是哪位。
也就是说,在整个过程中小程序前端是拿不到用户openId 的,它只能通过开发者服务器发给它的登录态来告诉服务器当前用户的信息。
授权:小程序的API接口中有些接口是需要用户授权才可以调用的,以调用获取用户信息
授权有这样几种方式:
1.wx.authorize()
但是调用这个api,来授权用户信息,是不会出现授权弹窗的。
想要出现授权弹窗,还需用第二种方式
2.<button open-type="getUserInfo"/>
用户通过点击<button open-type="getUserInfo" bindgetuserinfo="onGotUserInfo"/>弹出授权弹窗,如果同意授权则可以从bindgetuserinfo回调中获取到用户信息。
这里wx.setStorageSync()是缓存输入登录名称,以便测试传递值。
然后判断授权输出的信息,errMsg;授权成功则通过wx.login()获取code;将code通过wx.request()发送给自家服务器,服务器返回信息成功则登录成功。
拓展:检查是否授权wx.getSetting()
这里需要小程序端进行判断,如果已经授权过就可以直接调用相应的接口,如果没有授权,需要提示去授权或者直接跳转到授权页,当然这要根据你的项目需求来。