SEAN.js 注册后自动登录 req.user.roles

SEAN.js autologin after sign up and req.user.roles

我目前在一个项目中使用 sean.js。一切看起来都不错,但我对注册过程有疑问。我最近在我的路由上实施了后端策略,以根据用户的角色向他们授予权限,如下所示:

exports.invokeRolesPolicies = function () {
  acl.allow([{
    roles: ['myRole'],
    allows: [{
      resources: '/some-route',
      permissions: '*'
    }]
  }]);
};

exports.isAllowed = function (req, res, next) {
  var roles = (req.user) ? req.user.roles : ['guest'];

  // If an person is being processed and the current user created it then allow any manipulation
  if (req.people && req.user && req.people.user && req.people.user.id === req.user.id) {
    return next();
  }

  // Check for user roles
  acl.areAnyRolesAllowed(roles, req.route.path, req.method.toLowerCase(), function (err, isAllowed) {
    if (err) {
      // An authorization error occurred
      return res.status(500).send('Unexpected authorization error');
    } else {
      if (isAllowed) {
        // Access granted! Invoke next middleware
        return next();
      } else {
        return res.status(403).json({
          message: 'User is not authorized'
        });
      }
    }
  });
};

我使用了 SEAN 自带的模板,它使用 ACL 来设置权限。当您使用您的用户登录时,此方法工作正常。

问题是,当我从注册表单创建一个新用户时,它会自动登录系统,但它没有获得角色并且 req.user.roles 为空。我有一个过程,在注册后用户需要完成另一个表单来设置所有内容,但由于角色问题,策略无法识别角色并提供 "guest" 角色导致我无法访问我的路线。如果我在注册后自动登录后注销,一切正常,因为现在角色设置好了。

我是否必须在 redis 服务器上设置其他内容以及如何设置?或者我需要做什么?

好吧,经过长时间的研究,我想出了解决办法。因此,我在注册控制器上遗漏了一行代码。我需要像这样保存用户后立即登录 req.user:

user.save().then(function() {
    req.login(user, function(err) {
      if (err)
        res.status(400).send({
          message: errorHandler.getErrorMessage(err)
        });
      res.json(user);
    });
  }).catch(function(err) {

第二句是我不见了。

希望这对以后的其他人有所帮助。