小程序登录流程图:
1.绑定点击事件:
<view>测试获取用户唯一标识openId</view>
<button bindtap="handleGetOpenId">获取openId</button>
2.wx.login获取code:并将登录凭证发送到服务器
// 获取用户openId的回调
handleGetOpenId() {
// 1.获取登录凭证
wx.login({
success: async (res) => {
let code = res.code
}
})
// 2.将登录凭证发到服务器
let result = await request('/getOpenId',{{code}})
},
wx.login()描述:
用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
参数
| 属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
|---|---|---|---|---|---|
| timeout | number | 否 | 超时时间,单位ms | 1.9.90 | |
| success | function | 否 | 接口调用成功的回调函数 | ||
| fail | function | 否 | 接口调用失败的回调函数 | ||
| complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
3.在开发者就是自己的服务器端注册获取用户唯一标识的接口:在服务器app.js中写:
app.use('/getOpenId',async (req,res,next) => {
let code = req.query.code
let appId = '自己appId'
let appsecret = "自己的appsecret"
let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appsecret}&js_code=${code}&grant_type=authorization_code`
//发请求给微信服务器获取openId
let result = await fly.get(url)
//reuslt里面就有openId,不过是JSON格式的
let openId = JSON.parse(result.data).openid
//和用户其他信息关联,自定义登录态
let person = {
username:'才需和',
age:'18',
openId
}
//对用户数据进行加密,生成token返回客户端
let token = jwt.sign(person,'随便写个字符串就是密钥')
//验证身份,反编译token
let result2 = jwt.verify(token,'和上面密钥对应')
console.log(result2) //就是person数据
res.send(token)
}
4.由于flyio库类似于axios,但是他支持的平台多,比如node,小程序,所以我们在自己的服务器中下载这个包:
npm i flyio
引入:
const Fly = require("flyio/src/node")
const fly = new Fly
5.下载jsonwebtoken包来对用户数据进行加密,生成token返回客户端。
npm i jsonwebtoken
引入:
const jwt = require('jsonwebtoken')