表单提交不遵循重定向(Node.js)

时间:2019-03-06 21:37:25

标签: javascript html node.js forms passport.js

我有一个带有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请求的响应内容而不是我的用户加载被重定向到它。

有人知道我在做什么错吗?

2 个答案:

答案 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'));
});

希望有帮助。