小程序+nodejs+MySQL实现登录功能
时间: 2023-10-02 14:10:53 浏览: 192
基于Node.js+MySQL实现前后端用户登录注册【100012413】
实现登录功能需要以下步骤:
1. 创建一个小程序,包括登录页面和后台 API 接口。
2. 在小程序中使用 `wx.login()` 获取用户临时登录凭证 code,并将其发送到后台 API 接口。
3. 后台 API 接口使用 `code` 和小程序开发者密钥 `appid`、`secret` 调用微信提供的 API 接口获取用户的 `openid` 和 `session_key`。
4. 将获取到的 `openid` 保存到 MySQL 数据库中,并生成一个随机的 `token`,将其返回给小程序。
5. 小程序将 `token` 保存到本地,以后每次请求后台 API 接口时,都需要在请求头中带上 `token`。
6. 后台 API 接口在接收到请求时,从请求头中获取 `token`,并在 MySQL 数据库中查找对应的 `openid`,如果存在则说明用户已登录,否则返回未登录错误信息。
下面是具体的实现步骤:
小程序端代码:
```javascript
// login.js
Page({
login: function() {
wx.login({
success: res => {
wx.request({
url: 'http://localhost:3000/login',
method: 'POST',
data: {
code: res.code
},
success: res => {
// 将token保存到本地
wx.setStorageSync('token', res.data.token)
}
})
}
})
}
})
// index.js
Page({
onLoad: function() {
wx.request({
url: 'http://localhost:3000/user',
header: {
'token': wx.getStorageSync('token')
},
success: res => {
console.log(res.data)
}
})
}
})
```
后台 API 接口代码:
```javascript
const express = require('express')
const app = express()
const mysql = require('mysql')
const request = require('request')
// 创建 MySQL 连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
})
// 登录接口
app.post('/login', (req, res) => {
const code = req.body.code
const appid = 'your appid'
const secret = 'your secret'
// 调用微信 API 获取 openid 和 session_key
request(`https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`, (err, response, body) => {
const { openid, session_key } = JSON.parse(body)
// 生成一个随机 token
const token = Math.random().toString(36).substr(2)
// 将 openid 和 token 保存到 MySQL 数据库中
pool.query('INSERT INTO user SET ?', { openid, token }, (err, result) => {
if (err) throw err
res.send({ token })
})
})
})
// 用户信息接口
app.get('/user', (req, res) => {
const token = req.headers.token
// 在 MySQL 数据库中查找对应的 openid
pool.query('SELECT openid FROM user WHERE token = ?', [token], (err, result) => {
if (err) throw err
if (result.length === 0) {
res.status(401).send('Unauthorized')
} else {
// 如果存在对应的 openid,则说明用户已登录
res.send('User Info')
}
})
})
app.listen(3000, () => console.log('Server started'))
```
以上代码仅为示例,实际项目中需要根据具体需求进行修改。
阅读全文