1.0.2 • Published 4 years ago

egg-weapp-auth v1.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

egg-weapp-auth

NPM version build status Test coverage David deps Known Vulnerabilities npm download

为微信小程序提供授权功能

此插件基于 wafer2-node-sdk 授权模块

安装

$ npm i egg-weapp-auth --save

依赖说明

依赖的 egg 版本

egg-weapp-auth 版本egg 2.x
2.x😁
1.x

依赖的插件

  • mysql

开启插件

// config/plugin.js
exports.weappAuth = {
  enable: true,
  package: 'egg-weapp-auth',
};

使用指南

依赖的表

DROP TABLE IF EXISTS `csessioninfo`;
CREATE TABLE `csessioninfo` (
  `open_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `uuid` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `skey` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_visit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `session_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `user_info` varchar(2048) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`open_id`),
  KEY `openid` (`open_id`) USING BTREE,
  KEY `skey` (`skey`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会话管理用户信息';

配置

// config/config.${env}.js
exports.weappAuth = {
  appId: 'xxxxxxxxxxx',
  appSecret: 'xxxxxxxxxxxxxxxxxx'
};

使用方式

// app/router.js
module.exports = app => {
  const { router, controller } = app
  const authorization = app.middleware.authorization()
  const validation = app.middleware.validation()

  // user
  router.get('/login', authorization, controller.user.login)
  router.get('/user', validation, controller.user.validate)
};

// app/controller/user.js
const Controller = require('egg').Controller

class UserController extends Controller {
  async validate() {
    const { ctx } = this
    if (ctx.state.$wxInfo.loginState === 1) {
      // loginState 为 1,登录态校验成功
      ctx.state.data = ctx.state.$wxInfo.userinfo
    } else {
      ctx.state.code = -1
    }
  }

  async login() {
    const { ctx, app } = this

    if (ctx.state.$wxInfo.loginState) {
      ctx.state.data = ctx.state.$wxInfo.userinfo
      ctx.state.data['time'] = Math.floor(Date.now() / 1000)
    }
  }
}

module.exports = UserController

License

MIT