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

Posted

技术标签:

【中文标题】使用 Passport.js 和 Sails.js 注册后如何重定向到特定位置?【英文标题】:How to redirect to specific location after registration with Passport.js and Sails.js? 【发布时间】:2015-05-30 01:42:45 【问题描述】:

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

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

目前,默认行为是用户注册并自动进行身份验证,然后重定向到用户登录时重定向到的相同 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('/');
      );
    );
  ,

但是,我认为这仅适用于用户通过身份验证(登录)时。 我认为答案可能位于服务文件夹中的护照文件下,但我不确定。我还没有完全理解代码。

我只是在寻找放置此代码的正确位置,因为我不知道。那么,如何在用户注册后将其重定向到特定位置? (但只有在那之后)

谢谢。

【问题讨论】:

【参考方案1】:

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

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

user.isNew = true;

然后,在AuthControllercallback 方法中,在controllers 文件夹下,isNew 将作为req.user.isNew 可用(并设置为true),如果用户刚刚注册,那么这样,您可以在调用res.redirect 之前使用它来执行您的逻辑。所以,像这样(在那个方法中):

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

return res.redirect('/dashboard');

就是这样。

【讨论】:

以上是关于使用 Passport.js 和 Sails.js 注册后如何重定向到特定位置?的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js + Passport.js 获取当前登录用户

passport.js 使用sails.js 验证弹出窗口

Sails.js + Passport.js 通过 websockets 进行身份验证

Sails.js 0.11 和护照:“缺少凭据”错误

Passport.js 在 req.login 上失败

登录时如何“记住”用户-passport.js-phonegap