我尝试使用带有Express框架的Node创建一个简单的身份验证页面。
此时此刻,我并不特别担心弱势保护。
但是,我的路径文件显示出奇怪的行为。
以下是代码:
var express = require('express');
var router = express.Router();
var admin = require("../controllers/admin");
router.get('/', function(req, res) {
console.log('Entered top route.');
if(req.body.isAuthenticated) {
res.redirect('admin/index');
} else {
res.redirect('admin/login');
}
});
router.post('/authenticate', function(req,res) {
if(req.body.pword == "key") {
console.log("Resetting body.isAuth'ed");
req.body.isAuthenticated = true;
console.log("New val: " + req.body.isAuthenticated);
res.redirect('admin/index');
} else {
console.log("Failed login attempt: " + req.body.pword);
res.redirect('admin/login');
}
});
router.get('/login', admin.login);
router.get('/index', admin.index);
module.exports = router;
我们的想法是输入路线,然后我们点击最高路线(由控制台正确记录)。此重定向基于是否设置了req变量。这一切都正常,并且正确呈现登录(我使用玉模板)。登录文件的表单使用' admin / authenticate'回调此路由文件。这也适用;我能够正确检索输入(通过控制台日志确认)。但是,我在/ authenticate / function中采取的操作,即使它们与我在' /'中执行的操作完全相同。在上面的路线,失败。我得到404和Express Not Found打印输出完全没用。
我的控制台正确记录'登录失败尝试'或者'重置正文...新的val:true",但是然后执行完全相同的res.redirect,最初在router.get(' /')上面的方法中失败,而该函数中的res.redirects正确地重定向并呈现正确的值。
任何想法都可能出错?我可以在controllers / admin文件中发布admin.login / admin.index方法。但是,它们非常简单,我认为这个错误源于对get和post方法之间差异的基本误解(这是我第一次使用Node)。
谢谢!
答案 0 :(得分:2)
我认为问题在于相对路径
从路径res.redirect('admin/index')
和路径/
执行/authenticate
不一样。
res.redirect('admin/index')
的 /authenticate
会将用户重定向到/authenticate/admin/index
,这可能就是为什么它会给予404。
尝试在身份验证回调中将res.rediret('admin/index')
更改为res.redirect('/admin/index')
。