2017-06-23 17 views
1

私はUdemyチュートリアルに従っています。私はログインプロセスの最後のビットで立ち往生しています。私は新しいユーザーを登録することはできますが、ログインすることはできません。私は電子メールアドレスとパスワードを入力します。電子メールアドレスまたはパスワードの値が間違っているかどうかにかかわらず、送信ボタンを押すと、ログインページを再度プルするパスポートのfailureRedirectメソッドがトリガーされます。コンソールにはいくつかのconsole.logがありますが、コンソールには何も表示されません。また、任意の詳細が入力されていれば、未知のユーザエラーが発生するはずです。何が原因で動作しないのかわかりません。コンソールまたはブラウザでエラーが表示または検出されません。パスポートを使用してログインできません - Nodejs

形 - user.jsの

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt'); 
mongoose.connect('mongodb://localhost/db_name'); 
var db = mongoose.connection; 

//User Schema 

var UserSchema = mongoose.Schema({ 
    name:{ 
     type: String, 
     index:true 
    }, 
    email:{ 
     type:String 
    }, 
    password:{ 
     type:String, required:true, bcrypt:true 
    } 
}); 

var User = module.exports = mongoose.model('User', UserSchema); 

module.exports.comparePassword = function(candidatePassword, hash, callback){ 
    bcrypt.compare(candidatePassword, hash, function(err, isMatch){ 
     if(err) return callback(err); 
     callback(null, isMatch); 

    }); 
} 

module.exports.getUserByEmail = function(email, callback){ 
    var query = {email:email}; 
    User.findOne(query, callback); 
} 

module.exports.getUserById = function(id, callback){ 
    User.findById(id, callback); 
} 

のMongoDB - - ユーザのコレクションオブジェクト

db.users.find().pretty(); 
{ 
     "_id" : ObjectId("594c330d520d491b18771425"), 
     "name" : "John Doe", 
     "email" : "[email protected]", 
     "password" : "$2a$10$aFt9vfsSVJpFA8CMlCYIaOqQjW.6lV/1i0PibLelC43HscaAIvQPW", 
     "__v" : 0 
} 
var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

var User = require('../models/user'); 
router.get('/login', function(req, res, next) { 
    res.render('login', { title: 'login', errors: false }); 
}); 


passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.getUserById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 

passport.use(new LocalStrategy(
    function (email, password, done){ 
     console.log("testing... 1"); 
     User.getUserByEmail(email, function(err, user){ 
      if (err) throw err; 
      if(!user){ 
       console.log('Unknown User'); 
       console.log("testing... 3"); 
       return done(null, false, {message: 'Unknown User'}); 
      } 

      User.comparePassword(password, user.password, function(err, isMatch){ 
       console.log("testing... 2"); 
       if(err) throw err; 
       if (isMatch){ 
        return done(null, user); 
        console.log("testing... 4"); 
       }else{ 
        console.log("Invalid Password"); 
        return done(null,false, {message:'Invalid Password'}); 
       } 
      }); 
     }); 
    } 
)); 


router.post('/login', passport.authenticate('local', {failureRedirect: '/login', failureFlash: 'Invalid username or password'}), function(req, res) { 

    console.log('Authentication successful'); 
    //Flash message 
    req.flash('success','Your credentials match redirecting...'); 
    //Redirect to the dashboard page 
    res.location('/dashboard'); 
    res.redirect ('/dashboard'); 

}); 

モデルindex.js -

<form class="form-signin" action="/login" method="POST"> 
     <h2 class="form-signin-heading">Please sign in</h2> 
     <label for="inputEmail" class="sr-only">Email address</label> 
     <input type="email" id="email" name="email" class="form-control" placeholder="Email address" required autofocus> 
     <label for="inputPassword" class="sr-only">Password</label> 
     <input type="password" id="password" name="password" class="form-control" placeholder="Password" required> 
     <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> 
</form> 

ルートをlogin.ejs

答えて

1
passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 
passport.deserializeUser(function(user, done) { 
    User.getUserById(id, function(err, user) { 
    done(err, user); 
}); 
}); 

我々は、ユーザーオブジェクト、そしてdeserilaizeユーザーオブジェクトだけではなく、ID

をシリアル化した場合、パスポートの認証を証明する完全な例があり、https://github.com/rupalipemare/Mongoose-Demoにここでの例をご確認ください。

0
router.post('/login', passport.authenticate('local', {failureRedirect: '/login', failureFlash: 'Invalid username or password'}), function(req, res) { 

「./login」ではないですか?

+0

いいえ、それは正しいです。私はDOTなしですべての私のルートを持っています。私がDOTを追加した場合、それは発見されなかったエラーをスローします。 –

関連する問題