2016-01-11 80 views
13

我正在嘗試將護照集成到我的代碼的登錄表單中。客戶端調用服務器端工作,因爲它應該直到我請求passport.authenticate,400返回錯誤請求。我在這裏錯過了什麼。護照本地返回錯誤400錯誤請求角度

HTML

 <div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <input id="user-email" type="text" ng-model="user.email"> 
        <label for="user-email">Your email address</label> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <input id="user-password" type="password" ng-model="user.password"> 
        <label for="user-password">Your password</label> 
       </div> 
      </div> 
      <div id="login-button-panel" class="center-align"> 
       <button class="btn" id="login-btn" ng-click="vm.login(user);">Login</button> 
      </div> 
      <div class="section center"> 
       <a class="modal-trigger">Forgot password?</a> 
      </div> 
     </div> 

JS

$http.post('/api/login',user).success(function(result){ 
    console.log(result) 
}) 

server.js

passport.use(new LocalStrategy(
    function(username, password, done) { 
     return done(null, false, {message:'Unable to login'}) 
    } 
)); 
passport.serializeUser(function(user,done){ 
    done(null,user); 
}); 

passport.deserializeUser(function(user,done){ 
    done(null,user); 
}); 
app.post('/api/login', passport.authenticate('local'), function(req,res){ 
    res.json(req.user) 
}); 

回答

30

壞請求由護照丟失的用戶名和密碼訪問拋出。

它正在檢查正文和URL查詢字段usernamepassword。如果任是falsy請求被拒絕,狀態400

在創建LocalStrategy可以傳入額外的參數設置選項來構造選擇使用期權usernameField和/或passwordField命名不同領域。在您的特定情況下,這應該是這樣的:

passport.use(new LocalStrategy(
    {usernameField:"user-email", passwordField:"user-password"}, 
    function(username, password, done) { 
     return done(null, false, {message:'Unable to login'}) 
    } 
)); 
+0

對於最近的回覆感到抱歉。是的,你是對的。謝謝! –

+2

選項對象應該是LocalStrategy構造函數中的第一個參數,而不是'passport.use'方法中的第二個參數。 – keeri

+0

@Fkids感謝您的建議。修復。 – cepharum

3

在我的情況(快速4.0),我沒有使用body-parser

0

這個錯誤也來自於試圖訪問HTML DOM元素,而無需使用身體解析器

身體分析器,它可以讓一個模塊在遍歷HTML文檔樹閱讀尤其是在輸入字段的情況下的響應

使用 -

var parser = require('body-parser'); 
var urlencodedParser = parser.urlencoded({extended : false}); 


    app.post("/authenticate", urlencodedParser, passport.authenticate('local'), function (request, response) 
    {   
     response.redirect('/');      
    });