0
當我登錄到我的應用程序後,護照(本地策略)中間件將密碼與存儲在數據庫中的密碼相匹配,並將我路由到用戶頁面,但它不會啓動會話,由於這個原因,我無法驗證帖子並獲得該用戶的請求。Passport身份驗證不起作用。 Passport.serializeUser和passport.deserializeUser從未調用過被調用
玩過代碼後,我發現passport.serializeUser和passport.deserializeUser都不會被調用,我使用console.log()來檢查它。
我從這link讀取護照控制流程,發現在密碼匹配並且用戶通過後,中間件調用了req.login,進一步調用passport.serializeUser,我認爲在我的情況下req.login是從來沒有因爲該會話不被維護,因此被稱爲。
我已經嘗試了一切,但無法弄清楚我哪裏出錯了。
這是我的密碼配置: -
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/userModel');
module.exports = function(passport){
passport.serializeUser(function(user, done) {
console.log("serialize");
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
console.log("deserialize");
User.getUserById(id, function(err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy(function(username, password, done){
User.getUserByUsername(username, function(err, user){
if(err) throw err;
if(!user){
console.log("not user");
return done(null, false);
}
User.comparePassword(password, user.password, function(err, isMatch){
if(err) return done(err);
if(isMatch){
console.log("pass match");
return done(null, user);
} else {
console.log("invalid pass ");
return done(null, false);
}
});
});
}));
}
我總是得到響應「通過比賽,」如果我提交的登錄頁面正確的用戶信息。
這是登錄頁面,我已經安裝驗證請求
var LocalStrategy = require('passport-local').Strategy;
var passportAuth = require('../config/passport');
module.exports = function(app,bodyParser,passport){
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
app.post('/api/loginAuth', (req,res,next)=> {
passport.authenticate('local', function(err, user, info) {
if (err) {
console.log("inside error");
return next(err);
}
if (!user) {
console.log("No user");
res.status(401).send("not user");
} else {
console.log("verified user");
res.json(user);
}
})(req, res, next);
});
passportAuth(passport);
}
護照和會話建立在我的app.js
var session = require('express-session');
var passport = require('passport');
// Handle Sessions
app.use(session({
secret:'secret',
saveUninitialized: true,
resave: true,
}));
// Passport
app.use(passport.initialize());
app.use(passport.session());
這是我angularjs認證發佈採購信息
$http({
method: 'POST',
url: '/api/loginAuth',
data: $scope.userinfo,
withCredentials: true
}).success (
function(response){
var message = '<strong>'+response.name+'</strong> Successfully logged in!! ';
sharedDataService.setMessage(message);
sharedDataService.setProperty(response.name);
$state.go('todo', {username: response.username});
});
你知道你在哪裏申報'POST/API/loginAuth'的路由被稱爲_after_添加護照中間件('passport.initialize()的代碼/ passport.session ()')? – robertklep
是的,我確定,我已經重新檢查了它:) –
如果會話cookie在成功登錄後設置,您可以檢查瀏覽器的開發工具。 – robertklep