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

标签 javascript node.js sails.js passport.js

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

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

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

我尝试查看不同的 Passport 生成文件,但找不到“注册回调”或类似的内容。在 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('/');
      });
    });
  },

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

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

谢谢。

最佳答案

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

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

user.isNew = true;

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

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

就是这样。

关于javascript - 注册 Passport.js 和 Sails.js 后如何重定向到特定位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271717/

相关文章:

javascript - 使用node js在neo4j中创建 Node 时出现错误

javascript - 用于刷新 CSRF token 的心跳/保活服务

mysql - Node js : Assign mysql result to requests

node.js - 传递到手写笔文件的 Node 应用程序变量

gruntjs - 如何在缩小文件的末尾添加构建时间戳

javascript - 在页面检查器中启用 javascript 调试器

node.js - docker-compose NodeJS + Mongodb with mongoose,动态获取mongo容器ip

node.js - 未在 sails.js afterDisconnect() 中显示存储在 session 中的变量

node.js - 就绪检查失败 : NOAUTH Authentication required

javascript - 如何获取附加到 AJAX 请求的事件的元信息?