我试图做简单的autorization使用数组来模仿数据库。例如,我有两个人的数组:
const users = [{
info: 'First person',
login: 'firstPerson',
password: '11111111',
role: 'member'
}, {
info: 'Second person',
login: 'secondPerson',
password: '22222222',
role: 'admin'
}
];
他们有不同的角色:member和admin,这意味着他们在输入登录名和密码后会重定向到不同的页面。这是我的表格:
<form action='/categories' method='post'>
<div class="form-group">
<input class="form-control item" type="text" name="username"
maxlength="15" minlength="4" pattern="^[a-zA-Z0-9_.-]*$"
id="username" required autocomplete="off">
</div>
<div class="form-group">
<input class="form-control item" type="password" name="password"
minlength="8" id="password" required autocomplete="off">
</div>
<div class="form-group text-center">
<button class="btn btn-primary btn-block save-profile"
type="submit">Enter</button>
</div>
</form>
我正在使用Node.js和Express.js构建一个应用程序。我有个问题您访问的页面不存在!管理员应重定向到页面localhost:3000/choice。我需要拒绝访问此页面,如果用户(成员或管理员)没有登录(错误,如果用户输入页面localhost:3000/类别或localhost:3000/选择之前登录页面localhost:3000)。例如,对于类别,我做了这样的事情(app.js文件):
app.get("/", function(req, res) {
res.render("autorization"); }); //my form is located in this autorization.ejs
app.get("/categories", function(req, res){
const login = req.body.username;
const password = req.body.password;
if(!login || !password){
res.status(401).send("You are not autorized!");
}
else{
res.render("categories1");
}
});
我不能做同样的选择,因为我不能在我的表单中粘贴两个动作(只有action='/categories'
)。以下是我的帖子请求:
app.post("/categories", function(req, res) {
let USER = {
login: req.body.username,
password: req.body.password,
role: 'member'
};
if (users.some(user => {
if (req.body.username === user.login && req.body.password === user.password) {
USER = user;
return true;
} else
{
return false;
}
})) {
if (USER.role === 'member') {
res.render("categories1");
} else {
res.redirect('/choice');
}
} else{
res.redirect("/alert");
}
});
我怎么能做这种事呢?
2条答案
按热度按时间rggaifut1#
假设您希望保持登录表单的原样,并在后端稍微更改一下逻辑,那么您可以
/auth/login
/category
或/choice
页面在我看来应该是这样
前端
后台
更新:
根据您评论中的问题,您还需要实现适当的路由卫士来验证所需路由中的身份验证和授权。
例如,您希望
/choice
路由仅对管理员用户可访问,验证这一点的简单中间件是然后在前端,你可以验证这个状态码,即如果响应。状态=== 403|| response.status === 401,然后将用户重定向到登录页面。
在上面的switch例子中,也可以通过返回res.send('/login_url');
注意:将此中间件放在登录路由(以及所有打开的路由)之后,在本例中,将放在
/auth/login
之后jmo0nnb32#
使用正确的身份验证,检查用户名和密码与您的用户数组,您提供如下。您可以使用护照身份验证的电池选项.