在uni-app中实现微信小程序的登录授权,通常涉及以下几个步骤:
1. 前端调用登录接口:使用wx.login获取临时登录凭证(code)。
wx.login({ success: function(res) { if (res.code) { // 发送 res.code 到后台换取 openId, sessionKey, unionId loginWithCode(res.code); } else { console.log('登录失败!' + res.errMsg); } } });
2. 发送code到服务器:将获取到的code发送到开发者服务器。
function loginWithCode(code) { uni.request({ url: 'https://your-server.com/api/login', // 你的服务器登录接口地址 method: 'POST', data: { code: code // 将获取到的code发送给服务器 }, success: (response) => { // 处理服务器返回的自定义登录态(如token) if (response.data.success) { const token = response.data.token; // 保存token到本地存储 uni.setStorageSync('token', token); // 登录成功后,跳转到应用内某个页面 uni.redirectTo({ url: '/pages/index/index' }); } else { // 登录失败处理 console.error('登录失败', response.data.message); } }, fail: (error) => { console.error('请求失败', error); } }); }
3. 服务器换取session_key和openid:服务器使用code向微信服务器请求,换取用户的openid和session_key。
const express = require('express'); const axios = require('axios'); const app = express(); const bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.post('/api/login', async (req, res) => { try { const { code } = req.body; const appId = 'your-app-id'; // 你的小程序appId const appSecret = 'your-app-secret'; // 你的小程序appSecret const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`; const response = await axios.get(url); const { openid, session_key } = response.data; // 根据openid和session_key生成自定义的登录态(如token),并返回给前端 const token = generateToken(openid, session_key); // 假设你有一个generateToken函数来生成token res.json({ success: true, token: token }); } catch (error) { console.error('登录失败', error); res.json({ success: false, message: '登录失败' }); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
4. 生成自定义登录态:服务器可以根据openid和session_key等信息,结合自身的业务逻辑,生成自定义的登录态(如token),并返回给前端。
5. 前端保存登录态:前端将接收到的自定义登录态(如token)保存到本地(如localStorage、vuex等),以便后续请求时携带。
6. 前端发起请求:在后续的请求中,前端需要携带自定义的登录态(如token),以便服务器验证用户身份。