1. 用户登录的流程
小程序的用户登录流程一般经过以下几个步骤:
1.1 用户授权
用户打开小程序后,首先需要授权给小程序获取用户信息,包括微信头像、昵称等,否则小程序无法识别该用户信息。
// 调用微信授权接口:wx.getUserInfo
wx.getUserInfo({
success: function(res) {
console.log(res.userInfo)
}
})
1.2 获取用户登录凭证
小程序需要根据用户登录凭证来识别用户身份,可以通过调用微信登录接口获取。
// 调用微信登录接口:wx.login
wx.login({
success: function(res) {
if (res.code) {
console.log(res.code)
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
1.3 后台获取用户信息
小程序通过后台服务器根据用户登录凭证获取用户信息,包括用户唯一标识openid和会话密钥session_key。
// 获取用户登录凭证code,通过后台服务获取openid和session_key
wx.request({
url: 'https://example.com/onLogin',
data: {
code: code
},
success: function(res) {
console.log(res.data)
}
})
1.4 保存用户登录状态
小程序将用户的openid和session_key保存在本地存储中,作为用户的登录状态使用。
// 将openid和session_key保存在本地存储中,作为用户的登录状态
wx.setStorage({
key: 'openid',
data: openid
})
wx.setStorage({
key: 'session_key',
data: session_key
})
2. 维护用户登录状态
小程序需要在用户首次登录成功后,后续每次进入小程序都能自动识别用户身份,实现用户状态维护和用户信息展示。
2.1 获取用户本地存储信息
小程序在用户进入小程序后,需要从本地存储中获取用户的openid和session_key信息。
// 获取本地存储中的openid和session_key
const openid = wx.getStorageSync('openid')
const session_key = wx.getStorageSync('session_key')
if (!openid || !session_key) {
console.log('用户未登录!')
} else {
console.log('用户已登录!')
}
2.2 校验用户信息是否有效
每次获取到用户的openid和session_key后,需要校验用户信息是否有效,防止被恶意篡改和伪造。
// 后台服务校验用户信息是否有效
wx.request({
url: 'https://example.com/onCheckUser',
data: {
openid: openid,
session_key: session_key
},
success: function(res) {
if (res.data.code === 0) {
console.log('用户信息有效!')
} else {
console.log('用户信息已失效!')
}
}
})
2.3 更新用户登录状态
如果用户信息已失效,需要让用户重新登录授权,并重新保存用户的openid和session_key信息。
// 用户信息已失效,重新登录授权获取新的openid和session_key
wx.login({
success: function(res) {
if (res.code) {
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
},
success: function (res) {
wx.setStorageSync('openid', res.data.openid)
wx.setStorageSync('session_key', res.data.session_key)
console.log('用户登录状态已更新!')
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
3. 总结
小程序登录状态维护需要授权获取用户信息,获取用户登录凭证,后台获取用户信息,并保存用户登录状态。每次进入小程序需要校验用户信息是否有效,以保证用户信息安全。当用户信息失效时,需要让用户重新登录授权获取新的openid和session_key,更新用户登录状态。