我有一个带有NodeJS后端的基本HTML站点。
在我的NodeJS后端中,我有一个基于通行证的身份验证流程,该流程可以与API端点 / api / login 正确配合以启动身份验证。
在我的HTML中,我有一个基本表单来提交用户的电子邮件/密码:
<form action="api/login" method="POST" class="cozy">
<input type="text" id="email" name="email" class="form-control form-control-rounded" placeholder="Your registered email" required>
<input type="password" id="password" name="password" class="form-control form-control-rounded" placeholder="Your password" required>
<button type="submit" class="btn btn-accent btn-rounded">Login
<i class="fas fa-long-arrow-alt-right ml-2"></i>
</button>
</form>
如果身份验证成功,我的NodeJS端点将返回 302 状态,其标头为位置:/app/index.html ,这是我应用程序的“仪表板”页面只有登录后才能访问。
app.post('/api/login',
passport.authenticate('local-login', {
successRedirect: '/app/index.html',
failureRedirect: '/login.html'
})
);
app.get('/app/index.html', ensureAuthenticated, function(req, res) {
return res.sendFile(path.join(__dirname + '/private/index.html'));
});
现在,我的浏览器正在重定向 /app/index.html ,而不是重定向到此页面,并且我的仪表板页面已作为XHR请求的响应内容而不是我的用户加载被重定向到它。
有人知道我在做什么错吗?
答案 0 :(得分:0)
您似乎需要更新表单标签才能使用POST方法
<form action="api/login" class="cozy" method="POST">
或者,如果您在页面上使用客户端javascript,则可以拦截表单提交事件,调用event.preventDefault()
,然后使用fetch或jquery或其他方法将请求发送到服务器。
答案 1 :(得分:0)
请从您的路线中删除.html
。在进行护照身份验证时,您应该将用户重定向到某个路由,而不是一些.html文件。在/app/index.html
路由上,您正在提供index.html文件作为响应。不应该那样
而是尝试这个。
app.post('/api/login',
passport.authenticate('local-login', {
successRedirect: '/app/index',
failureRedirect: '/login'
})
);
对于回应
app.get('/app/index', ensureAuthenticated, function(req, res) {
return res.sendFile(path.join(__dirname + '/private/index.html'));
});
希望有帮助。