2015-12-29 10 views
9

lavorato su questo per un paio di ore ormai, abbastanza frustrante ...passaporto js credenziali mancanti

router.post('/', 
passport.authenticate('local-signup', function(err, user, info) { 
    console.log(err); 
}), function(req, res){ 
    console.log(req); 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(JSON.stringify({ a: 1 })); 
}); 

Quando eseguo questo, ho usato console.log, uscita era { message: 'Missing credentials' }, che mi porta a credere che il corpo il parser non analizza correttamente il messaggio del corpo. Quando uso questo percorso però ...

router.post('/', 
    function(req, res){ 
     console.log(req.body); 
     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify({ a: 1 })); 
    }); 

quando ho usato console.log, la produzione è stata {password: 'password', email: '[email protected]'}, che indica che le variabili req.body vengono impostati correttamente e sono disponibili.

app.js

var express = require('express'); 
var app = express(); 
var routes = require("./config/routes.config"); 
var models = require("./config/models.config"); 
var session = require('express-session'); 
var bodyParser = require('body-parser'); 

models.forEach(function(model){ 
    GLOBAL[model] = require('./models/'+model+".model"); 
}); 
var passport = require("./config/passport.config"); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(session({ secret: 'simpleExpressMVC', resave: true, saveUninitialized: true })); 
app.use(passport.initialize()); 
app.use(passport.session()); 
+0

sto affrontando anche lo stesso tipo di problema e ha fatto alots di ricerca, ma coundn't trovare alcuna soluzione :-( –

risposta

24

vedo il tuo req.body contiene {password: 'password', email: '[email protected]'}. email non è quello che cerca il passportjs, ma lo è username. È possibile modificare i nomi di input sul proprio HTML/JS oppure modificare i parametri predefiniti che passportjs sta cercando in req.body. Devi applicare queste modifiche dove definisci la tua strategia.

passport.use(new LocalStrategy({ // or whatever you want to use 
    usernameField: 'email', // define the parameter in req.body that passport can use as username and password 
    passwordField: 'password' 
    }, 
    function(username, password, done) { // depending on your strategy, you might not need this function ... 
    // ... 
    } 
)); 
2

In Router.post:

router.post('/', passport.authenticate('local-signup', { 
    successRedirect: '/dashboad', 
    failureRedirect: '/', 
    badRequestMessage: 'Your message you want to change.', //missing credentials 
    failureFlash: true 
}, function(req, res, next) { 
... 
Problemi correlati