我有一个现有的Sails V1项目,该项目是作为一个空应用程序生成的(它使用React前端)。现在,我想添加如果该应用程序已作为Web应用程序生成的身份验证端点,则该端点将被创建。那可能吗?
答案 0 :(得分:0)
是的,有可能。
您需要连接策略和相关操作。我会说,最好的选择是生成一个包含前端的新项目,并查看其设置方式。它利用策略中间件来调用策略动作。
module.exports.policies = {
'*': 'is-logged-in',
// Bypass the `is-logged-in` policy for:
'entrance/*': true,
'account/logout': true,
'view-homepage-or-redirect': true,
'deliver-contact-form-message': true,
};
在这里您看到policy.js
文件夹中的/config
默认情况下为所有控制器调用is-logged-in
。您还可以看到下面添加了一些例外。
is-logged-in
是文件/api/policies/is-logged-in.js
:
module.exports = async function (req, res, proceed) {
// If `req.me` is set, then we know that this request originated
// from a logged-in user.
if (req.me) {
return proceed();
}
// Otherwise, this request did not come from a logged-in user.
return res.unauthorized();
};
这是检查用户登录状态的部分。您可以看到它使用了req.me
中设置的api/hooks/custom/index.js
部分。在这里,它从数据库加载用户,并使登录的用户数据在req对象上可用。
如果您没有或不想使用此钩子,则可以将req.me
交换为req.session.userId
,前提是您在会话对象上设置了userId
登录处理程序。 Sails代码示例:
....
var userRecord = await User.findOne({
emailAddress: inputs.emailAddress.toLowerCase(),
});
// check user exist
....
// check password
....
//check remember-me
....
// Modify the active session instance.
this.req.session.userId = userRecord.id;
// Send success response (this is where the session actually gets persisted)
return exits.success();
....
我希望这可以使您走上正确的道路,至少在更深层次的挖掘方面。