如何为我的 Nodejs/Sails.js 应用实施 OAuth?
How to implement OAuth to my Nodejs/Sails.js app?
我有一个 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/
我想我已经让一切正常工作了(?) 当我注册一个帐户时,它会将数据保存在数据库中。登录似乎也能正常工作但是我不明白在登录将我重定向到主页后如何访问用户名和电子邮件地址等实际数据?我已经在邮递员上测试了登录,当我登录时我得到了一个 cookie。我应该用它做什么?
sails-generate-auth 生成的 AuthController 默认情况下不会将用户详细信息添加到会话中,因此您应该通过在 AuthController.js [=15] 的回调函数中添加以下行来手动添加它=]
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
.
我有一个 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/ 我想我已经让一切正常工作了(?) 当我注册一个帐户时,它会将数据保存在数据库中。登录似乎也能正常工作但是我不明白在登录将我重定向到主页后如何访问用户名和电子邮件地址等实际数据?我已经在邮递员上测试了登录,当我登录时我得到了一个 cookie。我应该用它做什么?
sails-generate-auth 生成的 AuthController 默认情况下不会将用户详细信息添加到会话中,因此您应该通过在 AuthController.js [=15] 的回调函数中添加以下行来手动添加它=]
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
.