Javascript 使用Passport验证express应用程序-Expressjs Passportjs
我有一个Javascript 使用Passport验证express应用程序-Expressjs Passportjs,javascript,session,express,passport.js,Javascript,Session,Express,Passport.js,我有一个express应用程序,我正在尝试使用passport local进行身份验证。这是我的express应用程序: app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: 'this is a string' })); app.use(passport.initialize()); app.use(passport.session()); clien
express
应用程序,我正在尝试使用passport local
进行身份验证。这是我的express
应用程序:
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'this is a string' }));
app.use(passport.initialize());
app.use(passport.session());
client = new pg.Client(connectionString);
client.connect();
passport.use(new LocalStrategy(
function(username, password, done) {
var query = client.query('SELECT * FROM users WHERE EMAIL = $1', [username], function(err, result){
if(err) {
console.log("Error");
return done(err);
}
if(!result.rows.length > 0) {
console.log("No users");
return done(null, false, { message: 'User not found'});
}
if(result.rows[0].password !== password) {
console.log("incorrect password");
return done(null, false, { message: 'Password Incorrect'});
}
console.log('authenticated');
return done(null, result.rows[0]);
});
}
));
passport.serializeUser(function(user, done) {
'use strict';
console.log('serialize');
console.log(user);
done(null, user.email);
});
passport.deserializeUser(function(id, done) {
'use strict';
console.log('deserialize');
User.findById(id, function(err, user) {
done(err, user);
});
});
app.post('/login', passport.authenticate('local'), function(req, res) {
'use strict';
console.log(req.user.username);
});
app.listen(port, function() {
'use strict';
console.log('Listening on:', port);
});
然后,我在身体中点击/login
url,点击json
:{username:'jason@gmail.com'密码:'密码
}。我通过LocalStrategy
函数,然后在serialize函数中,它进入done
函数,然后挂起。我没有收到任何错误或额外的日志记录,连接只是保持打开状态,控制权不会返回给调用方。我从未收到http
状态,它只是挂起
我想我的
会话有问题,但我不知道下一步该怎么办?好的,你能在那里尝试重定向吗?如果您在那一点上获得了正确的用户名,您的会话/身份验证看起来是正常的
app.post('/login', passport.authenticate('local', {
successRedirect: '/somewhere_intern',
failureRedirect: '/login'
}));
简短的问题。您是否在console.log(req.user.username)上获得输出;打开域时:端口/登录?我将其更改为console.log(req.user.user\u name)
,然后获取用户名。我添加了{successRedirect:/users],failureRedirect:/projects“}
然后得到的错误是无法获取/users
。我没有在此文件中定义/users
路由。