webentwicklung-frage-antwort-db.com.de

Lokale Passport-Fehlermeldung 400 fehlerhafte Anforderung mit Angular

Ich versuche, den Pass in das Anmeldeformular meines Codes zu integrieren. Die clientseitige anrufende Serverseite funktioniert ordnungsgemäß, bis in der Anforderung passport.authenticate aufgerufen wird. Was fehlt mir hier?.

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)
});
18
Gene Lim

Bad Request wurde vom Pass wegen fehlenden Zugriffs auf Benutzername und Passwort geworfen. 

Es überprüft die Rumpf- und URL-Abfrage für die Felder username und password. Wenn eine der Bedingungen falsy ist, wird die Anforderung mit Status 400 abgelehnt. 

Beim Erstellen Ihres LocalStrategy können Sie eine Reihe von Optionen in einem zusätzlichen Argument an den Konstruktor übergeben, indem Sie mit den Optionen usernameField und/oder passwordField anders benannte Felder auswählen. In Ihrem speziellen Fall würde das so aussehen:

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

In meinem Fall (Express 4.0) habe ich nicht body-parser verwendet.

11
Jeff Hoye

Dieser Fehler tritt auch beim Versuch auf, auf die HTML-DOM-Elemente zuzugreifen, ohne body-parser zu verwenden.

body-Parser ist ein Modul, mit dem Sie die HTML-Dokumentstruktur durchlaufen können, um die Antwort zu lesen, insbesondere bei Eingabefeldern 

Benutzen - 

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


    app.post("/authenticate", urlencodedParser, passport.authenticate('local'), function (request, response)
    {           
        response.redirect('/');                      
    });
6
Vandana Sharma
passport.use(new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'password'
    },
    function (email, password, done) {
        db.collection('User').findOne({ email: email }, async function (err, user) {
            console.log('user requested password caught in passport', password);
            if (err) { return done(err); }
            if (!user) { return done(null, false); }
            const matchPassword = await comparePassword(password, user.password);
            if (!matchPassword) { return done(null, false); }
            return done(null, user);
        });
    }
));
0
LekhRazz Rokaya