gpt4 book ai didi

node.js - 通过 Express/Auth0 后端登录用户

转载 作者:搜寻专家 更新时间:2023-11-01 00:30:46 25 4
gpt4 key购买 nike

Auth0 文档描述了如何设置 express-jwt 中间件来保护端点。问题在于文档似乎并未首先说明您如何获得有效的 JWT。

在角度方面,有关于使用角度插件实现登录页面的文档,很好。如何使用 express 实现路由,该路由采用用户名/密码并向客户端返回适当的 JWT,以便后续请求获得授权?

我想我可能在这里遗漏了一个关于 JWT 的基本概念;通过 Auth0,当使用用户名-密码-身份验证时,我的猜测是 Auth0 充当这些凭据的存储库。那里有关于将护照连接到 auth0 和 JWT 的文档,这些文档的问题是该文档假设用户名/密码数据库是本地的某个 MongoDB 实例......我想避免那种最初吸引 auth0 的设置.

是否有涵盖此内容的示例项目,展示了如何在后端获得有效的 JWT,而无需一些单独的前端 Angular 应用首先请求它?

最佳答案

我使用 passport.js内置本地身份验证策略,并将用户信息存储在我在需要授权的路由上读取的 JWT 中。

用户 ID 可以序列化/反序列化进出快速 session ,以使用请求中的身份验证 token (JWT) 获取用户标识符。在我看来,这是最好的方法,因为它限制了客户端上存储的数据量,并且比存储任何用户信息提供了更好的安全性。这是 express 中的一个示例:

//Set a session secret
var secrets = { sessionSecret: process.env.secret || 'my secret string'};

//Require express-jwt and set a secret for the cookie
var expressJwt = require('express-jwt');
var validateJwt = expressJwt({ secret: secrets.sessionSecret });

//Returns a jwt token signed by the app secret
var signToken = function(id) {
return jwt.sign({
id: id
}, secrets.sessionSecret, {
expiresInMinutes: 60 * 24 // 24 hours
});
};

//Set token cookie directly
var setTokenCookie = function(req, res) {
if (!req.user) {
return res.status(404).json({
message: 'Error during user validation'
});
}
var token = signToken(req.user.id, req.user.role);
res.cookie('token', JSON.stringify(token));
};

//Check to see if user is authenticated (call this when a route is requested)
var isAuthenticated = function(req, res, next) {
// allow access_token to be passed through query parameter as well
if (req.body && req.body.hasOwnProperty('access_token')) {
req.headers.authorization = 'Bearer ' + req.body.access_token;
}
// Validate jwt token
return validateJwt(req, res, next);
};

您可以将这些方法用作 express 中的中间件。假设上面的代码是 token.js,你可以强制它在每个请求上执行这样的路由:

app.get('/employee', token.isAuthenticated, employeeController.getEmployees);

我没有使用过 Angular,但它在我从事过的 Backbone 项目上效果很好,这个过程应该适用于任何基于浏览器的客户端,这些客户端可以为每个请求提供 X-auth cookie。您可以使用 ajax 设置来执行此操作:

$(document).ajaxSend(function(event, request) {
var token = readCookie('token');
if (token) {
request.setRequestHeader('authorization', 'Bearer ' + token);
}
});

下面是一个中间件示例,它验证用户登录并向客户端返回可用于后续请求的 token :

var validateLogin = function (req, res, next) {
var username = req.params.username;

// Authenticate using local strategy
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(404).json({
info: [{
msg: info.message
}]
});
}

// Send user and authentication token
var token = token.signToken(user.id, user.role);
res.cookie('token', token);
res.render('index', {token: token, user: user});

})(req, res, next);

};

关于node.js - 通过 Express/Auth0 后端登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35212263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com