1
我正在嘗試使用我在http://code.tutsplus.com/tutorials/authenticating-nodejs-applications-with-passport--cms-21619中找到的教程進行登錄工作。我修改了代碼以使用Sequelize。我能夠驗證用戶名和密碼,但在序列化用戶之後,它重定向到的頁面無法加載。我想知道是否有我錯過的東西。序列化用戶後PassportJS(本地)與Sequelize和Express卡在掛起
我沒有真正收到錯誤,但重定向到/測試/主頁卡在掛起,並且它不斷執行發佈請求。它似乎沒有運行req.isAuthenticated()或者
Executing (default): SELECT "id", "email", "username", "password" FROM "users" AS "user" WHERE "user"."username" = 'user14' LIMIT 1;
username and password matched
serializing user:
POST /test/login 302 377.738 ms - 64
Executing (default): SELECT "id", "email", "username", "password" FROM "users" AS "user" WHERE "user"."id" = 16;
GET /test/home - - ms - -
Executing (default): SELECT "id", "email", "username", "password" FROM "users" AS "user" WHERE "user"."id" = 16;
POST /test/home - - ms - -
Executing (default): SELECT "id", "email", "username", "password" FROM "users" AS "user" WHERE "user"."id" = 16;
POST /test/home - - ms - -
這裏是我的app.js的一個片段:
// configuring passport
var passport = require('passport');
var expressSession = require('express-session');
app.use(expressSession({ secret: 'keyboard cat', resave: false, saveUninitialized: false }));
app.use(passport.initialize());
app.use(passport.session());
// initialize passport
var initPassport = require('./passport/init');
initPassport(passport);
// routes
var routes = require('./routes/index');
var loginTest = require('./routes/test')(passport);
var gameRoute = require('./routes/game');
app.use('/', routes);
app.use('/test', loginTest);
app.use('/game', gameRoute);
init.js:
var login = require('./login');
var User = require('../server/models/index').user;
module.exports = function(passport){
passport.serializeUser(function(user, done) {
console.log('serializing user: ');
done(null, user.get('id'));
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
console.log('deserializing user:',user);
done(err, user);
});
});
// setting up Passport Strategies for Login
login(passport);
}
test.js (路由器)
var express = require('express');
var router = express.Router();
var isAuthenticated = function (req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/test');
}
module.exports = function(passport){
router.post('/login', passport.authenticate('login', {
successRedirect: '/test/home',
failureRedirect: '/test',
failureFlash : true
}));
/* GET Home Page */
router.get('/home', isAuthenticated, function(req, res){
res.render('home', { user: req.user });
});
return router;
}
login.js
var LocalStrategy = require('passport-local').Strategy;
var User = require('../server/models/index').user;
var bCrypt = require('bcrypt-nodejs');
module.exports = function(passport){
passport.use('login', new LocalStrategy({
passReqToCallback : true
},
function(req, username, password, done) {
// check if user with username exists or not
User.findOne({
where: {
username: username
}
}).then(function(user) {
if (!user){
console.log('User Not Found with username '+username);
return done(null, false, { message: 'Incorrect username.' });
}
if (!isValidPassword(user, password)){
console.log('Invalid Password');
return done(null, false, { message: 'Incorrect password.' });
}
console.log('username and password matched');
return done(null, user);
}
);
})
);
var isValidPassword = function(user, password){
return bCrypt.compareSync(password, user.password);
}
}