我尝试使用用户身份验证练习。
但它无法按照我的预期发挥作用。
我希望它能向我显示登录界面。
步骤进行:
1.使用localhost:12345 / login_page连接服务器
2.然后向我显示登录界面
3.用户名和密码中的密钥
var express = require('express');
var cookieSession = require('cookie-session');
var app = express();
app.use(cookieSession({
secret: 'session',
keys: 'node'
}));
app.get('/login_page', function(req, res){
if(!req.session.logined){
res.send('<a href="http://127.0.0.1:12345/logout">Logout Now</a>');
res.end();
return;
}
res.send('<form action="http://localhost:12345/login" method="POST">');
res.send('<input type="text" name="username">');
res.send('<br/>');
res.send('<input type="password" name="password">');
res.send('<br/>');
res.send('<input type="submit" value="login">');
res.send('</form>');
res.end();
});
app.post('/login', function(req, res){
if(res.body.username != 'user' ||
req.body.password != '12345678'){
res.send('Account or password error, please login again');
res.end();
return;
}
res.session.logined = true;
res.redirect('/login_page');
res.end();
});
app.post('/logout', function(req, res){
req.session.logined = false;
res.redirect('/login');
res.end();
});
app.listen(12345);
答案 0 :(得分:1)
您可能需要更改:
res.session.logined = true;
为:
req.session.logined = true;
另外,将res.send()
更改为res.write()
。
使用身体解析器。
将res.body
更改为req.body
。
将内容类型更改为text/html
。
那些甚至可能不是该程序中的所有错误,但那些是最明显的错误。考虑到您自己实现这些问题,最好使用Passport,特别是在您的情况下使用passport-local策略,因为它会为您处理很多逻辑。这是一个很好的教程:
对于托管静态文件(如HTML),请参阅以下答案:
答案 1 :(得分:0)
你有几个错误。
首先,每个请求不能多次使用res.send()
函数,最后不必使用res.end
。
因此,您的代码应与此类似:
var express = require('express');
var cookieSession = require('cookie-session');
var app = express();
app.use(cookieSession({
secret: 'session',
keys: 'node'
}));
app.get('/login_page', function(req, res){
if(!req.session.logined){
res.send('<a href="/logout">Logout Now</a>');
}
res.send('<form action="/login" method="POST"> <input type="text" name="username"><br/><input type="password" name="password"><br/><input type="submit" value="login"></form>');
});
app.post('/login', function(req, res){
if(res.body.username != 'user' ||
req.body.password != '12345678'){
res.send('Account or password error, please login again');
}
req.session.logined = true;
res.redirect('/login_page');
});
app.post('/logout', function(req, res){
req.session.logined = false;
res.redirect('/login');
});
app.listen(12345);
显然,为了更好的练习,您应该使用'res.render html
向or 'res.sendFile
个文件发送回复。