2017-02-28 8 views
1

私は本棚とパスポート付きの簡単な認証パネルを持っていますが、ログインしようとすると白い空のページ500が表示されます。助けてください。bookshelf.jsはパスポートで動作しません

のconfig /私はここに大きな問題がthen()の使用であると思い

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

ルート/ 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); 
... 

答えて

0

をpassport.js 。伝統的なコールバックとしては、errという引数はありません。

もう1つの小さな問題は、catch()がエラーをロギングするのではなく、パスポートに転送する必要があることです。

だから私は少しUser.validPassword()で混乱していた側の注意点として

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

のようなものにそれを変更してみてください。それは無効なパスワードの値を返しますか?

+1

はいパスワードが等しい場合、 'validPassword()'メソッドはfalseを返します。その作品に感謝します。 – mcek

関連する問題