2017-12-22 19 views
0

初めてpassportjsを使用してユーザーを認証しようとしていますが、動作させるのに問題がありました。だから、これは私がpassportjs authentication failed

Index.jsルートファイルで働いている、関連するコードがある

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

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

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

私は入力有効なEメールアドレスとパスワードは、私はドンapp.js私が望むように、家にリダイレクトされることはありません。代わりに私はログインページにリダイレクトされます。無効なメールアドレスを使用すると、同じことが起こります。また、ログインフォームを送信するときにログオンするようにしていても、電子メールとパスワードは表示されません。

誰でも私をここで助けてください。

+0

あなたが実行しようとしているconsole.logが表示されない場合は、あなたがヒットしようとしている機能全体がisnヒットしました。つまり、毎回失敗し、ログイン画面が再び表示されます。なぜあなたのコードに当てはまらないのかを理解して、あなたが探している答えを見つけるでしょう。 – zerohero

+0

ここでは、あなたが間違っている可能性がある場所を確認するための例を示します:https://github.com/passport/express- 4.x-local-example/blob/master/server.js – zerohero

+0

これを指摘してくれてありがとう、残念なことに私は今この2日間稼働しており、それを把握することができませんでした。代わりにapp.jsからindex.jsに戦略を移行する必要がありますか? – Mena

答えて

2

あなたはユーザー名としてemailがあることがわかりました。私は同様の問題を抱えていたし、溶液がちょうど戦略オプションにusernameFieldを追加することがわかった:

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

+0

'新しいLocalStrategy({usernameField: 'email'}、関数(email、password、res、done){return done(null、 'user')})'を追加しました。しかし、私のデータベースクエリ 'res.locals.connection.query( 'SELECT id、パスワードからユーザのメールアドレス=?'、[email]、function(err、user){...}'がこのエラーを投げています 'Can not read未定義のプロパティ 'connection' – Mena

0

私はあなたがあなたのルートindex.jsファイルにあなたのpassport.useを配置する必要があり、または何らかの形で渡すことのどちらかだと思いますindex.jsのパラメータとしてapp.js内に作成されたpassportインスタンス

これを試すことができますか?必要なときに新しいインスタンスが作成される可能性があります(パスポート)