2017-02-28 2 views
1

Ich habe eine einfache Auth-Panel mit Bücherregal und Reisepass, aber wenn ich versuche, einloggen ich weiße leere Seite 500. Ich versuche alle Lösungen, die ich im Web gefunden. Bitte helfen Sie.bookshelf.js funktioniert nicht mit Reisepass

config/passport.js

... 
    passport.use('local-login', new LocalStrategy({ 
      passReqToCallback : true 
     }, 
     function(req, username, password, done) { 
      User.where({username: username}).fetch().then(function(err, user) { 
       if (err) return done(err); 
       if (!user) { 
        return done(null, false, req.flash('loginMessage', 'Cant find user!')); 
       } 
       user = user.toJSON(); 
       if(User.validPassword(password, user.password)){ 
        return done(null, false, req.flash('loginMessage', 'Invalid pass!')); 
       } 
       return done(null, user); 
      }).catch(function(err) { 
       console.error(err); 
      }); 
     } 
    )); 
... 

Routen/auth.js

... 
router.post('/login', passport.authenticate('local-login', { 
    successRedirect: '/users/profile', 
    failureRedirect: '/auth/login', 
    failureFlash: true 
})); 
... 

server.js

const express  = require('express'); 
const session  = require('express-session'); 
const passport  = require('passport'); 
const flash   = require('connect-flash'); 
const path   = require('path'); 
const favicon  = require('serve-favicon'); 
const logger  = require('morgan'); 
const cookieParser = require('cookie-parser'); 
const bodyParser = require('body-parser'); 

const config  = require('./config/app.js'); 

const index   = require('./routes/index'); 
const auth   = require('./routes/auth'); 
const users   = require('./routes/users'); 

require('./config/passport.js')(passport); 

const app = express(); 

app.set('env', config.website.env); 

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))) 
app.use(session({ 
    secret: config.security.salt, 
    resave: true, 
    saveUninitialized: true 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 

app.use('/', index); 
app.use('/auth', auth); 
... 

Antwort

0

ich glaube, das Hauptproblem hier bei der Verwendung von then() ist . Es braucht kein err Argument als traditionelle Rückrufe.

Ein weiteres kleines Problem ist, dass die catch() den Fehler zum Pass weiterleiten sollte, anstatt nur zu protokollieren.

So versuchen, es zu so etwas wie

passport.use('local-login', new LocalStrategy({ 
    passReqToCallback : true 
    }, 
    function(req, username, password, done) { 
    new User({username: username}) 
     .fetch() 
     .then(function(user) { 
     if (!user) { 
      return done(null, false, 
      req.flash('loginMessage', 'Cant find user!')); 
     } 
     user = user.toJSON(); 
     if (User.validPassword(password, user.password)) { 
      return done(null, false, 
      req.flash('loginMessage', 'Invalid pass!')); 
     } 
     return done(null, user); 
     }) 
     .catch(function(err) { 
     return done(err); 
     }); 
    } 
)); 

Als Randbemerkung Wechsel war ich ein bisschen von User.validPassword() verwirrt. Gibt es einen true Wert für ungültige Passwörter zurück?

+1

Ja 'validPassword()' Methode gibt false zurück, wenn die Passwörter gleich sind. Danke für seine Arbeit. – mcek

Verwandte Themen