如何在我的Nodejs / Sails.js应用程序中实现OAuth?

时间:2015-04-01 10:14:56

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

我有一个sails.js应用程序,可以为我的客户端生成API。为了保护我的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/  而且我认为我应该按照它应该(#)注册帐户时将所有数据保存到数据库中。登录似乎也正常工作但我不明白如何在登录重定向到主页后访问用户名和电子邮件地址等实际数据?我已经在postman上测试了登录,当我登录时,我得到了一个cookie。我想用它做什么?

1 个答案:

答案 0 :(得分: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