添加身份验证¶
我们构建了一个新的Feathers应用程序.下一步是 创建服务.
生成身份验证¶
要为您的应用程序添加身份验证,我们可以运行
feathers generate authentication
首先询问我们想要使用哪些身份验证提供程序.在本指南中,我们仅介绍本地身份验证.它应该默认选中.按enter键.
接下来,我们必须定义我们将用于存储用户信息的服务.只需确认默认的 users,然后确认默认的NeDB数据库:
最终配置¶
注解
有关Feathers身份验证的详细信息,请参阅 认证.
创建用户并登录¶
我们刚刚创建了 users 服务并启用了本地身份验证.重新启动应用程序时,我们现在可以使用 email 和 password 创建一个新用户,类似于我们对消息所做的操作.然后将登录信息处理成JWT(JSON Web令牌). (有关更多信息,请参阅 JSON Web Tokens 是如何工作的).
创建用户¶
我们将使用以下数据创建一个新用户:
{
"email": "feathers@example.com",
"password": "secret"
}
生成的用户服务会自动安全地在数据库中散列密码,并将其从响应中排除. (密码永远不应该传回给客户).有几种方法可以创建新用户,例如,通过CURL:
curl 'http://localhost:3030/users/' -H 'Content-Type: application/json' --data-binary '{ "email": "feathers@example.com", "password": "secret" }'
使用REST客户端,例如 Postman 使用此按钮:
注解
创建具有相同电子邮件地址的用户只能使用一次,然后失败,因为它已存在于数据库中.这是对NeDB实施的限制;它可能必须在使用其他数据库时手动实现.
获得一个令牌¶
要创建JWT,我们现在可以使用所需的策略(local)将登录信息发布到 authentication 服务:
{
"strategy": "local",
"email": "feathers@example.com",
"password": "secret"
}
通过CURL:
curl 'http://localhost:3030/authentication/' -H 'Content-Type: application/json' --data-binary '{ "strategy": "local", "email": "feathers@example.com", "password": "secret" }'
使用REST客户端,例如 Postman:
然后,可以使用返回的令牌对此特定用户进行身份验证,方法是将其添加到新HTTP请求的 Authorization 标头中.由于我们在创建前端时也会在客户端上使用Feathers,因此我们不必担心手动创建和使用本指南的令牌.有关验证REST API调用的更多信息,请参阅 认证.
保护消息服务¶
让我们将消息服务限制为经过身份验证的用户.如果我们在生成其他服务 之前 运行了 feathers generate authentication, 那么 feathers generate service 会询问服务是否应该仅限于经过身份验证的用户.但是,由于我们首先创建了消息服务,所以我们现在必须手动更新 src/services/messages/messages.hooks.js,如下所示:
const { authenticate } = require('@feathersjs/authentication').hooks;
module.exports = {
before: {
all: [ authenticate('jwt') ],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
after: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};
这样,只有拥有有效JWT的用户才能访问该服务.这也会自动为经过身份验证的用户设置 params.user.