koa2-auth v0.0.4
Koa2-auth
A elegant authorization middleware for Koa2.
Install
npm install --production koa2-authUsage
Before you use any authorization, please register it first.
Auth.prototype.register(authName,function callback(ctx[,next]))The you can use following to check the permission.
ctx.auth.must("authName");##Example
var Koa = require('koa');
var app = new Koa();
let Auth = require("koa2-auth");
let auth = new Auth();
auth.register("Never::base", async ctx => {
ctx.throw(401, {
code: 419,
msg: "All Access denied!"
})
})//before you use, you must register it first.
app.use(auth.auth());
app.use(async ctx => {
await ctx.auth.must("Never");
ctx.response.status = 200;
ctx.response.body = JSON.stringify({
code: 200,
msg: "This will never return."
})
})Permisson Symbol Example
- register:
baseBase authorization Eg: You can use it to check if the session exist.User::baseUser's base autorization Eg: Ensure it's a user.User::password::writeA custom authorzationItem::baseItem base authorzationItem::*::AdminIllegibility matchingItem::*::baseIllegibility matching can also use base modeItem::main::creatSpecific checking
- usage
basewill trigger following checkingbase
User::basewill triggerbaseUser::base
User::password::writewill triggerbaseUser::baseUser::password::write
Item::ASDFAWSL::Adminwill triggerbaseItem::baseItem::*::baseItem::*::Admin
Item::main::creatwill triggerbaseItem::baseItem::main::creat
Authorization Function
If the authorization funtion doesn't throw an error, it means that the permission checking pass. So please use Promise or async in your callback function, as the second param.
The callback function's first param is ctx, which are just the context we know in Koa.
Values in each illegibility matching will be stored in array ctx.auth.params.
If the checking pass, you can return any value, it has no influence on the running; if checking fail, please use ctx.throw to throw the error, or manually:
const err = new Error('Stop here!');
err.status = 403; // Set error code or client will get a 500.
err.expose = true; // Default is true
throw err;During the checking, if you have something want to return, you can store it in the ctx.auth.checkBack and use it later. All checking will be executed in order, once throw an error, all checking will stop immediately, so you needn't to worry about undefined problem.