用于小程序登录授权的工具包。
npm install mini-program-authority
mini-program-authority 对小程序前端的登录授权逻辑进行了封装。
开发者引入工具包,初始化传入必选参数后,直接调用工具包提供的方法,即可完成登录授权验证。
最新微信小程序授权均采用授权按钮方式,我们这里要求,授权按钮放置于独立的授权页面。 授权页请求授权、授权信息存入开发者服务器的相关逻辑,交给开发者去实现。
loginApi(string,必选):开发者服务器的登录接口地址
authPath(string,必选):开发者自定义的授权页面地址
getUserInfo(function,必选):从开发者服务器获取用户信息的方法
【要求】调用返回 promise 化的 userInfo 信息
getPhone(function,必选):从开发者服务器获取用户手机号的方法
【要求】调用返回 promise 化的手机号信息
setUserInfo(function,非必须):向开发者服务器存储用户信息的方法
【要求】调用返回 promise,返回值为 true 或可转换成 true 的任意值皆可 【限制】传入参数严格等于 wx.getUserInfo 返回的字段值
** 【注】 setUserInfo 逻辑,正常应在开发者自定义的授权页拿到用户授权后,由开发者直接执行,将获取的授权信息存入开发者服务器。 这里提供的 setUserInfo 参数,主要用于,用户允许授权,但授权页存入开发者服务器失败的场景下,备用。 如果不提供 setUserInfo 方法,建议必要时,在 checkLogin 回调中,将 userInfo 手动存入开发者服务器。 **
如果未登录,自动执行登录逻辑,其中包含请求授权用户信息。
如果已登录,获取用户信息并返回。
如果开发者服务器存有用户手机号,直接返回。
如果没有,前往授权页获取授权。
代码层面缓存。 checkLogin 一次后,全局可拿到值。
方便开发者手动同步服务器当前的用户信息。
如果有,返回这个 token。如果没有,返回 ‘’。
1.封装 promise 化的 request(仅供参考)
// request.js
const request = (options) =>
new Promise((resolve, reject) => {
wx.request({
...options,
success(res) {
resolve(res);
},
fail(err) {
reject(err);
},
});
});
export default request;
2.定义开发者服务器调用方法,用于 init(仅供参考)
// io/auth.js
import request from './request';
const Api = {};
// 获取用户信息(开发者服务器)
Api.getUserInfo = () =>
request({
url: '/getUserInfo',
method: 'get',
}).then(
(rs) => rs.data // rs.data: {nickName : xxx, gender: GENDER ......}
);
// 获取手机号(开发者服务器)
Api.getPhone = () =>
request({
url: '/getPhone',
method: 'get',
}).then(
(rs) => rs.data // rs.data: {phone: 13899990000}
);
3.页面使用 demo
// use.js
import auth from 'mini-program-authority';
import apiAuth from './io/auth';
// 初始化 建议在入口文件init
auth.init({
loginApi: 'https://api.test.com/login',
authPath: '/pages/auth',
getUserInfo: apiAuth.getUserInfo,
getPhone: apiAuth.getPhone,
});
// 检查登录状态 在进入需要登录授权页面的前一个页面,进行checkLogin,checkLogin.then()内执行页面跳转,跳转到需授权的页面
auth
.checkLogin()
.then((userInfo) => {
console.log('用户已登录:', userInfo);
const token = auth.getToken();
console.log('token:', token);
// 检查用户手机号授权
return auth.checkPhone().then((phone) => {
console.log('已获取用户手机号:', phone);
});
})
.catch((err) => {
console.log('err:', err);
});
https://cdn.jia.qq.com/2019/PES-FE/static/images/小程序登录授权流程图.png