2014-02-18 136 views
0

我有護照本地策略設置爲以下任一故障情況下工作正常。然而在我驗證服務器日誌「D1」,然後掛起,與請求處於「待定」狀態,其餘情況:護照(本地)掛在身份驗證

passport.use(
    new LocalStrategy({ 
     usernameField: 'email', 
     passwordField: 'password' 
    }, 
    function(email, password, done) { 
     User.getUser(email, password).then(function(users){ 

      if(users && users.length == 1) { 
       console.log('d1') 
       return done(null,users[0]) ; 
      } else { 
       console.log('d2') 
       return done(null, false, { message: 'Incorrect credentials.' }); 
      } 
     }, function(e){ 
      console.log('d3') 
      return done(null, false, { message: 'Incorrect credentials.' }); 
     }); 
    }) 
); 

passport.serializeUser(function(user, done) { 
    console.log('s1') 
    done(null, user); 
}); 

passport.deserializeUser(function(user, done) { 
    console.log('s2') 
    done(null, user); 
}); 


server.post(authPostRoute 
    , passport.authenticate('local',{ 
     successRedirect : "/ideas", 
     failureRedirect : "/", 
    }) 
); 

理想我不想在成功/失敗重定向,並且將而是返回一些JSON到瀏覽器。但我似乎無法得到這個簡單的方案工作。

更新 - 通過跟蹤,以護照本地/ strategy.js

上面做的是從strategy.js

function verified(err, user, info) { 
    if (err) { return self.error(err); } 
     if (!user) { return self.fail(info); } 

    //console.log(self.success.toString()) 
    self.success(user, info); 
    } 

這是所有好這個功能。 self.success似乎是一個有效的函數,但它沒有被調用,正如我所知道的那樣。

更新II:護照/ authenticate.js

貌似成功是在護照中定義的函數/ authenticate.js

strategy.success = function(user, info) { 

} 

我似乎得到

req.logIn(user, options, function(err) { 

但從不輸入功能。我是否缺少logIn的定義?

更新三:登錄

通過對護照跟蹤/ HTTP/prequest.js,此行顯然是導致該問題的

if (!this._passport) throw new Error('passport.initialize() middleware not in use'); 

雖然我認爲我有這個啓用它:

server.use(passport.initialize()); 

編輯更新IV:移動passport.initialize

我移動護照初始化在流程中的早些時候,現在成功和錯誤重定向似乎工作。

但我仍然無法控制對客戶端的響應。我不想重定向。這是一個不同的問題嗎?

+0

我假設你已經檢查過了,但'用戶'變量在'.then'成功函數中返回真的是一個數組嗎?'getUser'聽起來像會返回一個對象。所以也許'用戶[0]'失敗了? – Matt

+0

是的 - 謝謝 – akaphenom

回答

1

我遇到類似的問題,並解決passport.initialize早期的行解決了這個問題,非常感謝。

但我仍然無法控制對客戶端的響應。我不想 想重定向。這是一個不同的問題嗎?

如果有人有這個問題;定製邏輯的 ,你可以使用這樣的回調。

router.post('/login', function(req, res, next) { 
    passport.authenticate('local-signin', function(err, user, info) { 
     if (err) { return next(err); } 
     if (!user) { 
     return res.render('account/login', { 
      pageTitle: 'Sign in', 
      form: req.body 
     }); 
     } 
     req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/myaccount'); 
     }); 
    })(req, res, next); 
});