mini-program-authority

小程序登录授权工具包

Usage no npm install needed!

<script type="module">
  import miniProgramAuthority from 'https://cdn.skypack.dev/mini-program-authority';
</script>

README

用于小程序登录授权的工具包。

安装

npm install mini-program-authority

功能简介

mini-program-authority 对小程序前端的登录授权逻辑进行了封装。

开发者引入工具包,初始化传入必选参数后,直接调用工具包提供的方法,即可完成登录授权验证。

注意事项

最新微信小程序授权均采用授权按钮方式,我们这里要求,授权按钮放置于独立的授权页面。 授权页请求授权、授权信息存入开发者服务器的相关逻辑,交给开发者去实现。

使用说明

1.init(loginApi, authPath, getUserInfo, getPhone, setUserInfo):初始化 全局只初始化一次即可

loginApi(string,必选):开发者服务器的登录接口地址

authPath(string,必选):开发者自定义的授权页面地址

getUserInfo(function,必选):从开发者服务器获取用户信息的方法

【要求】调用返回promise化的userInfo信息

getPhone(function,必选):从开发者服务器获取用户手机号的方法

【要求】调用返回promise化的手机号信息

setUserInfo(function,非必须):向开发者服务器存储用户信息的方法

【要求】调用返回promise,返回值为true或可转换成true的任意值皆可 【限制】传入参数严格等于wx.getUserInfo返回的字段值

** 【注】 setUserInfo逻辑,正常应在开发者自定义的授权页拿到用户授权后,由开发者直接执行,将获取的授权信息存入开发者服务器。 这里提供的setUserInfo参数,主要用于,用户允许授权,但授权页存入开发者服务器失败的场景下,备用。 如果不提供setUserInfo方法,建议必要时,在checkLogin回调中,将userInfo手动存入开发者服务器。 **

2.checkLogin:检查登录状态,返回promise化的userInfo

如果未登录,自动执行登录逻辑,其中包含请求授权用户信息。

如果已登录,获取用户信息并返回。

3.checkPhone:检查用户手机号,返回promise化的phone

如果开发者服务器存有用户手机号,直接返回。

如果没有,前往授权页获取授权。

4.getToken:获取前端本地缓存的token

代码层面缓存。 checkLogin一次后,全局可拿到值。

使用 Demo

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