2016-07-17 143 views
0

我使用護照和本地通行證登錄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); 
     }); 
    } 
    }; 

如果有人解釋這個問題,我將不勝感激。

+0

我懷疑'req.session.passport'將可在您所記錄它的位置,一個新的會話。我認爲郵差電話顯示的原因是因爲它被設置爲_previous_電話。我的猜測是,您正在嘗試調試另一個問題,即在登錄後進行Angular $ http調用時,會話似乎不存在。 – robertklep

+0

如果我在路由中指定類似isAuth的響應,則可以使用郵遞員例如,如果用戶經過身份驗證(如果用戶存在於會話中),則爲true或false。當我使用角度這將返回false每個單一的請求,因爲會話不存儲。如果我使用不同的用戶是相同的東西角度不起作用,郵遞員的作品。 – Kerrop

+0

這個問題最有可能是因爲你的cookies是'httpOnly',這意味着當你進行AJAX調用時cookie不會被髮送(默認)。查看['http http'](https://docs.angularjs.org/api/ng/service/$http)的文檔,特別是'withCredentials'選項。 – robertklep

回答

0

withCredentials: true,對角側和 app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', 'http://localhost:9000'); res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header("Access-Control-Allow-Headers", "Origin, Authorization, X-Requested-With, Content-Type, Accept"); });解決它app.js

相關問題