我使用護照和本地通行證登錄mongoDB。node-express-passport(LocalStrategy)
passport.use('local-login', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback : true
},
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
console.log(user);
console.log(req.session);
console.log(req.session.passport);
return done(null, user);
});
}
));
,並呼籲
router.post('/login', passport.authenticate('local-login'), function(req, res) {
res.json(req.user);
});
當我提出從角會後呼籲沒有得到保存的POST。這是我的角落POST請求後,從服務器console.log:
-------user---------
{ _id: 5782f005917d7fa01b27adba,
username: 'asd',
password: 'asd',
__v: 0,
roles: [ 'user' ] }
-------req.session---------
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: false } }
-------req.session.passport---------
undefined
----------------
serializeUser: 5782f005917d7fa01b27adba
我測試它與郵遞員也,它似乎工作。登錄後的用戶在apear會話:
-------req.session---------
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: false },
passport: { user: '5782f005917d7fa01b27adba' } }
-------req.session.passport---------
{ user: '5782f005917d7fa01b27adba' }
我的配置是:
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(session({
secret: 'brucespringsteinmegaboss',
resave: true,
saveUninitialized: true,
cookie: {
secure: false
} }));
app.use(passport.initialize());
app.use(passport.session());
包:
"body-parser": "^1.15.2",
"express": "^4.14.0",
"express-session": "^1.14.0",
"mongoose": "^4.5.3",
"passport": "^0.3.2",
"passport-local": "^1.0.0"
NPM:3.9.6 節點:6.2.2
角度呼叫:
$scope.login = function(form, user) {
if (form.$valid) {
$http.post('http://localhost:3000/api/auth/local/login', user)
.success(function(resp){
$rootScope.currentUser = user;
console.log($rootScope.currentUser);
});
}
};
如果有人解釋這個問題,我將不勝感激。
我懷疑'req.session.passport'將可在您所記錄它的位置,一個新的會話。我認爲郵差電話顯示的原因是因爲它被設置爲_previous_電話。我的猜測是,您正在嘗試調試另一個問題,即在登錄後進行Angular $ http調用時,會話似乎不存在。 – robertklep
如果我在路由中指定類似isAuth的響應,則可以使用郵遞員例如,如果用戶經過身份驗證(如果用戶存在於會話中),則爲true或false。當我使用角度這將返回false每個單一的請求,因爲會話不存儲。如果我使用不同的用戶是相同的東西角度不起作用,郵遞員的作品。 – Kerrop
這個問題最有可能是因爲你的cookies是'httpOnly',這意味着當你進行AJAX調用時cookie不會被髮送(默認)。查看['http http'](https://docs.angularjs.org/api/ng/service/$http)的文檔,特別是'withCredentials'選項。 – robertklep