示例
现在打开你的 app.js 文件并在其中输入以下代码。
//这就是身份验证的检查依据
var credentials = { name: 'Ayush', pass: 'India' }
var koa = require('koa');
var auth = require('koa-basic-auth');
var _router = require('koa-router')();
var app = new koa();
//错误处理中间件
app.use(function *(next){
try {
yield next;
} catch (err) {
if (401 == err.status) {
this.status = 401;
this.set('WWW-Authenticate', 'Basic');
this.body = 'You have no access here';
} else {
throw err;
}
}
});
//在这里设置身份验证作为第一个中间件。
//如果用户未通过身份验证,则返回错误。
_router.get('/protected', auth(credentials), async (ctx){
ctx.body = 'You have access to the protected area.';
});
//这里没有认证中间件。
_router.get('/unprotected', async (ctx){
ctx.body = "Anyone can access this area";
});
app.use(_router.routes());
app.listen(3001);
我们已经创建了一个错误处理中间件来处理所有与身份验证相关的错误。然后,我们创建了两条路线–
- /protected - 只有用户发送正确的身份验证标头时,才能访问此路由。对于所有其他人,它会给出一个错误。
- /unprotected - 任何人都可以访问此路由,无论是否有身份验证。
现在,如果您向 /protected 发送一个没有身份验证头或使用错误凭据的请求,您将收到一个错误。例如,
curl http://localhost:3001/protected
您将收到的响应为-
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
Content-Type: text/plain; charset=utf-8
Content-Length: 28
Date: Sat, 17 Sep 2020 19:05:56 GMT
Connection: keep-alive
Please authenticate yourself
但是,使用正确的凭据,您将获得预期的响应。例如,
curl -H "Authorization: basic QXl1c2g6SW5kaWE=" http://localhost:3001/protected -i
你得到的回答是-
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 38
Date: Sat, 17 Sep 2020 19:07:33 GMT
Connection: keep-alive
You have access to the protected area.
未受保护的路线仍然对所有人开放。