如何将身份验证端点添加到现有的Sails V1项目?

时间:2019-01-16 04:15:38

标签: sails.js

我有一个现有的Sails V1项目,该项目是作为一个空应用程序生成的(它使用React前端)。现在,我想添加如果该应用程序已作为Web应用程序生成的身份验证端点,则该端点将被创建。那可能吗?

1 个答案:

答案 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();
....

我希望这可以使您走上正确的道路,至少在更深层次的挖掘方面。