2017-12-22 3 views
0

Ich versuche, Benutzer mit Pass-Pass-Dateien zum ersten Mal zu authentifizieren, aber ich habe Probleme, es zur Arbeit zu bekommen. Das ist also der entsprechende Code Ich arbeite mitPass-ID-Authentifizierung fehlgeschlagen

Index.js Routendatei

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var bcrypt = require('bcryptjs'); 

router.post('/', passport.authenticate('local', { 
    successRedirect: 'home', 
    failureRedirect: '/' 
})); 

app.js

// Authentication packages 
var session = require('express-session'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var MySQLStore = require('express-mysql-session')(session); 
var bcrypt = require('bcryptjs'); 

passport.use(new LocalStrategy(function(email, password, done) { 
    console.log(email); 
    console.log(password); 

    res.locals.connection.query('SELECT id, password FROM users WHERE email = ?', [email], function(err, user) { 
     console.log(user); 

     if (err) {return done(err)}; 

     if (user.length === 0) { 
      done(null, false); 
     }; 

     const hash = user[0].password.toString(); 
     console.log(hash); 

     bcrypt.compare(password, hash, function(err, res) { 
      if (res === true) { 
       return done(null, {user_id: user[0].id}); 
      } else { 
       return done(null, false); 
      } 
     }); 
    }); 
} 
)); 

Wenn ich geben Sie eine gültige E-Mail-Adresse und das Passwort, I don‘ Ich werde wie ich will nach Hause weitergeleitet. Stattdessen werde ich zurück zur Anmeldeseite geleitet. Das Gleiche passiert, wenn ich eine ungültige E-Mail-Adresse verwende. Ich sehe auch die E-Mail und das Passwort nicht, obwohl ich versuche, sie zu loggen, wenn ich das Login-Formular absende.

Kann mir bitte jemand hier helfen.

+0

Wenn Sie die console.log nicht sehen, bedeutet dies, dass die gesamte Funktion, die Sie versuchen zu treffen, isn ist nicht getroffen. Das bedeutet, dass es jedes Mal fehlschlägt und Sie den Anmeldebildschirm erneut anzeigen. Finden Sie heraus, warum es Ihren Code nicht trifft, und Sie werden die Antwort finden, die Sie suchen. – zerohero

+0

Hier ist ein Beispiel, durch das Sie überprüfen können, wo Sie möglicherweise einen Fehler machen: https://github.com/passport/express- 4.x-local-example/blob/master/server.js – zerohero

+0

Danke, dass ich darauf hingewiesen habe, leider bin ich jetzt seit 2 Tagen im Rennen und konnte es nicht herausfinden. Sollte ich stattdessen die Strategie von app.js in index.js verschieben? – Mena

Antwort

2

Ich bemerkte, dass Sie email als Benutzername haben. Ich hatte ein ähnliches Problem und fand, dass die Lösung nur usernameField zu den Strategieoptionen hinzuzufügen war:

new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})

+0

Die 'neue LocalStrategy ({benutzernameFeld: 'email'}, funktion (email, passwort, res, done) {return done (null, 'benutzer')}}' hinzugefügt und das funktioniert einwandfrei. Aber das Hinzufügen meiner Datenbankabfrage 'res.locals.connection.query ('SELECT ID, Passwort FROM Benutzer WHERE E-Mail =?', [E-Mail], Funktion (Fehler, Benutzer) {...}' verursacht diesen Fehler 'Kann nicht gelesen werden Eigenschaft 'Verbindung' von undefiniert ' – Mena

0

ich glaube, Sie entweder müssen Ihre passport.use in Ihrer Route index.js Datei zu platzieren, oder irgendwie passieren die passport Instanz erstellt in app.js als Parameter zu index.js

Könnten Sie das versuchen? Es ist möglich, dass jedes Mal eine neue Instanz erstellt wird ('pass')

Verwandte Themen