2016-01-11 26 views
13

Sto tentando di integrare il passaporto nel modulo di accesso del mio codice. Lato server di chiamata lato client funziona come dovrebbe finché non richiamo passport.authenticate nella richiesta, 400 Richiesta non valida è stata restituita. Cosa mi manca qui.Errore di restituzione locale passaporto 400 richiesta errata con Angular

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

risposta

30

Bad Request generato dal passaporto per la mancanza di accesso a username e password.

Sta controllando la query di corpo e URL per i campi username e password. Se uno dei due è falsy la richiesta viene rifiutata con lo stato 400.

sulla creazione di LocalStrategy si può passare serie di opzioni in ulteriore argomento al costruttore di scegliere i campi in modo diverso nome utilizzando le opzioni usernameField e/o passwordField. Nel tuo caso particolare, ciò simile a questa:

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

scusa per la risposta tardiva. E sì, hai ragione. Grazie! –

+2

L'oggetto options deve essere il primo argomento nel costruttore di LocalStrategy, non il secondo argomento nel metodo 'passport.use'. – keeri

+0

@Fkids Grazie per il consiglio. Aggiustato. – cepharum

3

Nel mio caso (Express 4.0), non stavo usando body-parser

0

Questo errore arriva anche dal tentativo di accedere agli elementi del DOM HTML senza utilizzare corpo-parser

corpo-parser è un modulo che ti permette di attraversare l'albero del documento HTML per leggere la risposta in particolare nel caso dei campi di input

Usa -

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


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