如何在使用Passport.js和Sails.js注册后重定向到特定位置



我使用的是Sails.js,并且我已经安装了passportpassport-local模块,用于本地身份验证。

当我安装passport模块时,一些文件是根据策略、服务、模型和控制器自动创建的。我已经修改了其中一些文件来满足我的需求,但是,我找不到一种方法来将用户重定向到特定的位置,特别是在他注册之后。

目前,默认行为是用户注册并自动进行身份验证,然后重定向到用户登录时重定向到的同一url。

我试着查看不同的护照生成文件,但找不到"注册回调"或类似的文件。在AuthController中,有一个"回调"方法,如下所示:

  callback: function (req, res) {
    function tryAgain (err) {
      var flashError = req.flash('error')[0];
      if (err && !flashError ) {
        req.flash('error', 'Error.Passport.Generic');
      } else if (flashError) {
        req.flash('error', flashError);
      }
      req.flash('form', req.body);
      var action = req.param('action');
      switch (action) {
        case 'register':
          res.redirect('/signup');
          break;
        case 'disconnect':
          res.redirect('back');
          break;
        default:
          res.redirect('/login');
      }
    }
    passport.callback(req, res, function (err, user) {
      if (err) {
        return tryAgain();
      }
      req.login(user, function (err) {
        if (err) {
          return tryAgain();
        }
        res.redirect('/');
      });
    });
  },

然而,我认为这只适用于用户经过身份验证(登录)的情况。我想答案可能在服务文件夹的护照文件下面,但我不确定。我还没有完全理解代码。

我只是想找一个合适的地方来放置这个代码,因为我没有任何线索。那么,如何在用户注册后将其重定向到特定位置?(但仅在此之后)

谢谢。

嗯,我不知道这是否是最好的方法,但我发现它很简单;这就是我所做的,以防有人发现自己处于类似的情况下,设置类似。

api/services/protocols/local.js下,有一个名为exports.register的方法;在该方法中,在调用next()之前,向user声明一个属性isNew,如下所示:

user.isNew = true;

然后,在AuthControllercallback方法中,在controllers文件夹下,如果用户刚刚注册,则isNew将作为req.user.isNew可用(并设置为true),这样,您就可以在调用res.redirect之前使用它进行逻辑运算。因此,类似这样的东西(在该方法中):

if(req.user.isNew) {
    return res.redirect('/welcomePage');
}
return res.redirect('/dashboard');

就是这样。

最新更新