2016-01-11 17 views
13

Próbuję zintegrować paszport z formularzem logowania do mojego kodu. Strona serwera wzywającego po stronie klienta działa tak, jak powinna, dopóki nie wezwę paszportu.authenticate w żądaniu, zwrócono 400 złych żądań. Czego tu mi brakuje?Lokalny zwrot z paszportu 400 nieprawidłowych żądań z Angularem

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) 
}); 

Odpowiedz

30

Bad Request został wyrzucony przez paszportu dla brakujących dostęp na nazwę użytkownika i hasło.

Sprawdza treść i adresy URL dla pól username i password. Jeśli któryś jest falsy wniosek został odrzucony ze statusem 400.

Na tworzenia LocalStrategy można przekazać zestaw opcji w dodatkowy argument do konstruktora wyborze różnie nazwanych pól Korzystanie z opcji usernameField i/lub passwordField. W danym przypadku będzie to wyglądać tak:

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

Przepraszam za spóźnioną odpowiedź. I tak, masz rację. Dzięki! –

+2

Obiekt options powinien być pierwszym argumentem w konstruktorze LocalStrategy, a nie drugim argumentem w metodzie "passport.use". – keeri

+0

@Fkids Dzięki za radę. Naprawione. – cepharum

0

Ten błąd również pochodzi z próby uzyskania dostępu do elementów HTML DOM bez użycia body-parser

body-parser jest modułem, który pozwala ci przechodzić przez drzewo dokumentu HTML, aby przeczytać odpowiedź zwłaszcza w przypadku pól wejściowych

Wykorzystanie -

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


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