为微信小程序提供授权功能
此插件基于 wafer2-node-sdk 授权模块
$ npm i egg-weapp-auth --save
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