扫码一下
查看教程更方便
身份验证是一个过程,其中提供的凭据与本地操作系统或身份验证服务器上的授权用户信息数据库中的文件进行比较。 如果凭证匹配,则该过程完成并且用户被授予访问权限。
我们将创建一个使用基本 HTTP 身份验证的非常基本的身份验证系统。 这是实施访问控制的最简单方法,因为它不需要 cookie、会话或其他任何东西。 要使用它,客户端必须将 Authorization 标头连同它发出的每个请求一起发送。 用户名和密码未加密,而是连接在一个字符串中,如下所示。
username:password
此字符串使用 Base64 编码,并且单词 Basic 放在此值之前。 例如,如果用户名是 jiyik 和密码 123456,那么字符串“jiyik:123456”将按照授权标头中的编码发送。
Authorization: Basic QXl1c2g6SW5kaWE=
要在我们的 koa 应用程序中实现这一点,需要 koa-basic-auth
中间件。首先安装它
$ npm install --save koa-basic-auth
现在打开我们的 app.js 文件并在其中输入以下代码。
var credentials = { name: 'jiyik', pass: '123456' }
var koa = require('koa');
var auth = require('koa-basic-auth');
var _ = require('koa-router')();
const convert = require('koa-convert');
var app = new koa();
// 错误处理中间件
app.use(convert(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;
}
}
}));
// 在此处将身份验证设置为第一个中间件。
// 如果用户未通过身份验证,这将返回错误。
_.get('/protected', auth(credentials), convert(function* (next){
this.body = 'You have access to the protected area.';
yield next;
}));
// 这里没有身份验证中间件。
_.get('/unprotected', convert(function* (next) {
this.body = "Anyone can access this area";
yield next;
}));
app.use(_.routes());
app.listen(3000);
我们创建了一个错误处理中间件来处理所有与身份验证相关的错误。 然后,我们创建了 2 个路由
现在,如果在没有身份验证标头或使用错误凭据的情况下向 /protected 发送请求,我们将看到如下的内容,需要我们来登录
这个中间件会让我们输入用户名和密码。
/unprotected 路由仍然可供所有人使用。