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

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

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

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

如何在我的应用程序中实现 OAuth?请详细解答,以便我充分理解。

更新:

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

最佳答案

sails-generate-auth生成的AuthController默认情况下不会将用户详细信息添加到 session 中,因此您应该通过将以下行添加到 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 在任何 Controller 和 View 中使用用户详细信息,例如 twitter 提供您的用户名,以便您可以使用 req.session。 user.用户名.

关于node.js - 如何在我的 Nodejs/Sails.js 应用程序中实现 OAuth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29388159/

相关文章:

node.js - google api 的刷新 token 在 nodejs 中无法正常工作

ios - 使用oauth2自动登录

spring-boot - 在 REST 微服务上使用 Zuul Proxy、Oauth2 实现身份验证和授权

使用 ADAL 的 Azure AD OAuth 身份验证 : what's the resource ID?

oauth - 环回 Passport 登录

android - 在 Google App Engine 上,我可以关联 Google OAuth 2 token 和使用 Android 的 AccountManager 获得的 SACSID token 吗?

calendar - google oauth2 刷新 token 限制

javascript - ExpressJS 接收 JSON 字符串但缺少某些部分

javascript - 通过 socket.io Swift 客户端在 iOS 中使用 Socket.io

node.js - 如何使用 Node 使用 Express-http-proxy 进行代理以消除最后的休息