gpt4 book ai didi

node.js - Express JS 基于路由的身份验证

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:08 24 4
gpt4 key购买 nike

我使用express框架创建了node js应用程序。

我创建了中间件来限制对某些路由的访问。

中间件实际上工作得很好。但我在显示数据时遇到困难。

假设在我的应用程序中,我创建了用于显示国家/地区列表的路由('/country/master'),即使用内部不同/默认路由('/country/')从 mongoDB 获取数据的 html 页面。

在这种情况下,用户将无法看到数据,因为我没有授予“/”路由权限。但我想显示数据但不允许他使用“/”路由来检查数据。

我该如何处理这个案子???

最佳答案

答案取决于您的身份验证策略,即您是否使用 session 标识符、访问 token 等。

无论哪种情况,我建议您从身份验证中中断凭证交换(也称为登录)。它们应该是单独的中间件功能。下面是一个示例。

虽然这回答了您的特定于 ExpressJS 的问题,但它确实遗漏了许多在您构建身份验证系统时重要的其他细节(例如如何安全地存储密码)。我工作于Stormpath ,我们以API的形式提供用户管理,这样您就不必担心所有的安全细节!使用 express-stormpath 将我们的 API 集成到您的应用程序中非常容易模块。您将在几分钟内拥有一个功能齐全的用户数据库,而无需设置 mongo 或用户表。

综上所述,这是示例:

/* pseudo example of building your own authentication middleware */

function usernamePasswordExchange(req,res,next){
var username = req.body.username;
var password = req.body.password;

callToAuthService(username,password,function(err,user){
if(err){
next(err); // bad password, user doesn’t exist, etc
}else{
/*
this part depends on your application. do you use
sessions or access tokens? you need to send the user
something that they can use for authentication on
subsequent requests
*/
res.end(/* send something */);
}
});
}

function authenticate(req,res,next){
/*
read the cookie, access token, etc.
verify that it is legit and then find
the user that it’s associated with
*/
validateRequestAndGetUser(req,function(err,user){
if(err){
next(err); // session expired, tampered, revoked
}else{
req.user = user;
next();
}
});
}

app.post('/login',usernamePasswordExchange);

app.get('/protected-resource',authenticate,function(req,res,next){
/*
If we are here we know the user is authenticated and we
can know who the user is by referencing req.user
*/
});

关于node.js - Express JS 基于路由的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31381104/

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