Egg's authorization(JSON Web Token Authentication Plug)
$ npm i egg-authorization --save
// {app_root}/config/plugin.js
exports.auth = {
enable: true,
package: "egg-authorization"
};
// {app_root}/config/config.default.js
'use strict';
exports.auth = {
enable: true,
// 是使用什么认证
type: 'jwt',
// jwt配置
jwt: {
common: {
// 是否开启解析
enableParse: true,
// 是否开启验签
enableSignature: false,
// 是否开启错误处理
enableOnError: true,
},
generate: {
// 生成秘钥
secret: '123456',
// 有效时间
exp: 3600,
},
parse: {
// 需要解析 token 的位置
tokenPos: 'headers.authorization',
// 解析秘钥
secret: '123456',
},
// 用户自定义错误
onerror: {
// 解析错误的时候策略
// ignore 忽略错误
// exception 抛异常
// returnFormat 返回自定义的格式
strategy: 'returnFormat',
// 返回数据的格式,目前支持json 和 html
returnType: 'json',
json(ctx) {
ctx.body = { msg: 'Unauthorized' };
ctx.status = 401;
},
html(ctx) {
ctx.body = '<h3>Unauthorized</h3>';
ctx.status = 410;
},
},
},
};
see config/config.default.js for more detail.
// app/router.js
"use strict";
module.exports = app => {
app.get('/login',app.controller.login.index);
};
'use strict';
module.exports = app => {
class LoginController extends app.Controller {
* index() {
console.log('login userInfo body : ', this.ctx.query.user);
this.ctx.body = this.ctx.query.user;
}
}
return LoginController;
};
you can use this way to get the token context
// app/controller/test.js
("use strict");
module.exports = app => {
class SuccessController extends app.Controller {
index() {
// get the token
const authorization = this.ctx.headers.authorization;
const data = this.ctx.auth.decode(authorization);
console.log(data);
this.ctx.body = data;
}
}
return SuccessController;
};
Please open an issue here.