Skip to content

sherry-npm/mini-program-authority

Repository files navigation

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

安装

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 一次后,全局可拿到值。

5.checkUserInfo:最新用户信息获取

方便开发者手动同步服务器当前的用户信息。

6.checkToken:手动检查 storage 里是否有未过期 token

如果有,返回这个 token。如果没有,返回 ‘’。

使用 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

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published