【问题标题】:How to implement OAuth to my Nodejs/Sails.js app?如何对我的 Nodejs/Sails.js 应用程序实施 OAuth?
【发布时间】:2015-06-05 22:40:19
【问题描述】:

我有一个为我的客户端生成 API 的sails.js 应用程序。为了保护我的 API,我需要在我的 Sails 应用程序中实现 OAuth2.0。我已经开始关注这个教程了:https://www.npmjs.com/package/sails-generate-auth#requirements

但是当我每次尝试提升服务器时,我都会遇到各种不同的错误。我也不明白我应该在哪里将我的凭据发送到服务器并获取访问令牌。我对 Sails.js 还很陌生,刚刚了解 OAuth,但我找不到有关如何实施 OAuth 的适当指南。

如何对我的应用实施 OAuth?请详细解答,以便我能完全理解。

更新:

好的,所以我开始遵循本指南:https://www.bearfruit.org/2014/07/21/tutorial-easy-authentication-for-sails-js-apps/ 而且我认为我可以正常工作(?)当我注册一个帐户时,它会按应有的方式将数据保存在数据库中。登录似乎也可以正常工作但是我不明白在登录将我重定向到主页后如何访问用户名和电子邮件地址等实际数据?我已经在邮递员上测试了登录,当我登录时我得到一个 cookie。我想用它做什么?

【问题讨论】:

标签: node.js oauth oauth-2.0 sails.js


【解决方案1】:

sails-generate-auth 生成的 AuthController 默认不会将用户详细信息添加到会话中,因此您应该通过将以下行添加到 AuthController.js 中的回调函数来手动添加它

req.session.user = user;

这就是回调的样子:

callback: function (req, res) {
function tryAgain (err) {

  // Only certain error messages are returned via req.flash('error', someError)
  // because we shouldn't expose internal authorization errors to the user.
  // We do return a generic error and the original request body.
  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);

  // If an error was thrown, redirect the user to the
  // login, register or disconnect action initiator view.
  // These views should take care of rendering the error messages.
  var action = req.param('action');

  switch (action) {
    case 'register':
      res.redirect('/register');
      break;
    case 'disconnect':
      res.redirect('back');
      break;
    default:
      res.redirect('/login');
  }
}

passport.callback(req, res, function (err, user, challenges, statuses) {
  if (err || !user) {
    return tryAgain(challenges);
  }

  req.login(user, function (err) {
    if (err) {
      return tryAgain(err);
    }

    // Mark the session as authenticated to work with default Sails sessionAuth.js policy
    req.session.authenticated = true;

    req.session.user = user;

    // Upon successful login, send the user to the homepage were req.user
    // will be available.
    res.redirect('/');
  });
});

}

您现在可以通过引用 req.session.user 在任何控制器和视图中使用用户详细信息,例如 twitter 提供您的用户名,因此您可以使用 req.session.user.username

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2015-08-13
    • 2014-08-13
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多