nestjs对接微信小程序登录
时间: 2023-09-03 10:15:19 浏览: 263
1. 获取微信小程序登录凭证 code
在小程序中,用户登录后,可以获取到微信的登录凭证 code。可以在小程序中使用 `wx.login` 方法来获取该凭证,示例如下:
```javascript
wx.login({
success: function(res) {
if (res.code) {
// 获取成功,将 code 传给后台服务器
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
})
```
2. 后台服务器使用 code 换取用户信息
将获取到的 code 发送到后台服务器,使用 `axios` 或其他 HTTP 请求库发送请求,换取用户的 openid 和 session_key。示例如下:
```javascript
const axios = require('axios')
const APPID = 'your appid'
const SECRET = 'your secret'
const code = 'the code you got from wx.login'
axios.get(`https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${SECRET}&js_code=${code}&grant_type=authorization_code`)
.then(response => {
const { openid, session_key } = response.data
// 将 openid 和 session_key 存储到数据库中,生成用户登录凭证(token),返回给小程序
})
.catch(error => {
console.log(error)
})
```
3. 生成用户登录凭证(token)
将用户的 openid 和 session_key 存储到数据库中,生成用户登录凭证(token),返回给小程序。可以使用 `jsonwebtoken` 库来生成 token,示例如下:
```javascript
const jwt = require('jsonwebtoken')
const secret = 'your secret'
const token = jwt.sign({ openid, session_key }, secret, { expiresIn: '1h' })
```
4. 小程序登录成功后,发送 token 到后台服务器
小程序登录成功后,将生成的 token 发送到后台服务器,后台服务器可以使用 `jsonwebtoken` 验证 token 的合法性,并从中解析出用户的 openid 和 session_key。示例如下:
```javascript
const express = require('express')
const jwt = require('jsonwebtoken')
const secret = 'your secret'
const app = express()
app.post('/login', (req, res) => {
const token = req.body.token
jwt.verify(token, secret, (err, decoded) => {
if (err) {
res.status(401).json({ message: '无效的登录凭证' })
} else {
const { openid, session_key } = decoded
// 根据 openid 和 session_key 获取用户信息,返回给小程序
}
})
})
```
阅读全文