请...我是Node js的新手
我为了学习目的而尝试这个
我创建了 server.js 文件
var http=require('http');
var flash = require('connect-flash');
var express=require('express');
var fs=require('fs');
var mysql=require('mysql');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session')
var app=express();
var server=http.createServer(app);
var User=[];
server.listen(8000);
var connection=mysql.createConnection({
host:'****',
user:'****',
password:'****'
});
connection.connect(function(Error,Res){
if(!Error)
{
connection.query('USE USERS');
connection.query( "select *from USERS", function(err, rows){
if(err) {
throw err;
}else{
User.push(rows);
}
});
}
});
app.get('/', function(request,response){
fs.readFile('login.html', function(Error,Res){
if(!Error)
{
response.writeHead(200,{'content-type':'text/html'});
response.write(Res);
}
});
});
app.use(session({secret: '<mysecret>',saveUninitialized: true,resave: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(id, done) {
done(err, user);
});
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login',
failureFlash: true })
);
我不知道如何在节点js中使用护照验证用户名和密码,但无论如何我在上面尝试过这个
我的 login.html 类似于
<html>
<head>
<title>login</title>
<script src="assets/js/Angular.min.js"></script>
<style>
</style>
</head>
<body>
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username"/>
</div>
<div>
<label>Password:</label>
<input type="password" name="password"/>
</div>
<div>
<input type="submit" value="Log In"/>
</div>
</form>
</body>
</html>
我的SQL用户表有像
这样的数据username:Admin,
password:Admin
我在运行浏览器并输入node server.js
之后使用命令提示符http://localhost:8000
运行server.js文件,我得到了以下屏幕
然后我输入用户名,密码 管理,管理,当我提交时我获得{{1我认为这意味着用户名密码错误,因为我指定了Cannot GET /login
。但我提供了正确的用户名和密码,为什么我得到了failureRedirect: '/login'
而不是Cannot GET /login
。我在哪里可以做错?请帮助
答案 0 :(得分:0)
这是什么, validPassword()
方法?你有定义吗?
我敢打赌,你没有。
因此,尝试向Passport中间件添加更多日志记录并跟踪控制台。像bellow这样的东西,我怀疑你根本不会得到错误日志,因为应用程序会在validPassword()之前失败:
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) {
console.log('MySQL Error: ', err);
return done(err);
}
if (!user) {
console.log('Incorrect username error.');
return done(null, false, { message: 'Incorrect username.' });
}
console.lg('Trying user.validPassword() call');
if (!user.validPassword(password)) {
console.log('Incorrect password.');
return done(null, false, { message: 'Incorrect password.' });
}
console.log('All correct, user found: ', user);
return done(null, user);
});
}
));