2017-04-18 13 views
0

私はこの質問を既に見てきました。しかし、私は多くの答えを読んだが、彼らは助けていない。私はログインフォームで何をしていても、「MISSING CREDENTIALS」エラーを表示し続けます。私は電子メールとパスワードを使用してユーザーのログインを実装しようとしています。セッションのオプションとすべてが素敵なもの -Passport jsとmongoDBのユーザーログイン

マイルートファイル

const express = require('express'); 
const router = express.Router(); 
const passport = require('passport'); 
const LocalStrategy = require('passport-local').Strategy; 
const User = require('../models/user'); 

passport.use(new LocalStrategy((email, password, done) => { 
    User.getUserByEmail(email, (err, user) => { 
    if(err) throw err; 
    if(!user) { 
     return done(null, false, {message: 'this account does not exist'}); 
    } 

    User.comparePassword(password, user.password, (err, isMatch) => { 
     if(err) throw err; 
     if(isMatch) { 
     return done(null, user); 
     } 
     else { 
     return done(null, false, {message: 'oops! wrong password! try again'}); 
     } 
    }); 
    }); 
})); 

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

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

router.post('/', (req, res, next) => { 
    passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/toSignInPage', 
    failureFlash: true 
    })(req, res, next); 
}); 

module.exports = router; 

user.jsのは

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
const bcrypt = require('bcryptjs'); 

const UserSchema = new Schema({ 
    email: { 
    type: String, 
    required: true, 
    trim: true 
    }, 
    name: { 
    type: String, 
    required: true, 
    unique: true, 
    trim: true 
    }, 
    password: { 
    type: String, 
    required: true, 
    trim: true 
    }, 
    profilePhoto: { 
    originalemail: String, 
    imagePath: String 
    }, 
    token: String 
}); 

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

module.exports.registerUser = function(newUser, callback) { 
    bcrypt.genSalt(10, (err, salt) => { 
    bcrypt.hash(newUser.password, salt, (err, hash) => { 
     if(err) { 
     console.log(err); 
     } 
     newUser.password = hash; 
     newUser.save(callback); 
    }); 
    }); 
}; 

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

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

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

私は初期化されてきた私のapp.jsファイルにパスポートを提出します。フォーム

 <form method="post" action="/signInPage"> 


      <label for="mail"> Email </label> 
      <input type="email" id="mail" name="email" /> 
      <label for="password"> Password</label> 
      <input type="password" id="password" name="password"/> 

      <button type="submit">Sign in</button> 

      <p class="corp"> <a href="forgot.html">Forgot password?</a> </p> 

     </form> 

にも

私のhtml(ハンドル)は、すべてのヘルプは、この上で認識されます。私はしばらくの間デバッグをしていましたが、何が間違っていなければならないのか分からないようです。理解できない形式で質問を適切にフォーマットしなかった場合は、私に知らせてください。

+0

は、私は、サーバー上のフォームのPOSTアクションが表示されません。私はそれを逃していますか?さらに、ユーザーが見つからない場合やパスワードが間違っている場合には、違う方法でユーザーに返答しないでください。ハッキングが簡単になります。 – Paul

+0

お返事ありがとうございました。ポストアクションは実際にはsignup.jsというフォルダに定義されているルートを '/ signup'しています。サイドノートのおかげで、私はそれを実装することを確認します。 –

答えて

2

解決策へのリンクを投稿してくれて感謝してくれる誰かが、コメントを見つけることができないので、ソリューションを追加するだけです。

を持つユーザ名でパスポートJSログのユーザーにデフォルト

passport.use(new LocalStrategy((username, password, done) => { 

})); 

によってはので、私は電子メールで、ユーザーにログインするために電子メール

passport.use(new LocalStrategy((email, password, done) => { 

})); 

を使用しようとしていた、私はそれをしなければなりませんでしたこれは電子メールで送信するユーザ名のデフォルトの使用をオーバーライドします

passport.use(new LocalStrategy((email, password, done) => { 
    { 
    usernameField : 'email', 
    passwordField : 'password' 
} 
})); 

このよう...

ここsoultionへのリンクです:

https://github.com/scotch-io/easy-node-authentication/blob/master/config/passport.js#L58

関連する問題