2017-10-16 7 views
0

Passport.jsを使用してExpressでログインが作成されています。これですべての設定が完了し、ユーザー名とパスワードが正しいときにユーザーページにリダイレクトされます。しかし、今私は、資格情報が間違っているときにメッセージを表示したい。今のところは、これは私のpassport.jsセットアップで '不正'Passport.jsでのユーザー名またはパスワードの失敗メッセージ

の自動メッセージで空白のページにつながる:

App.js:

var mongoose = require('mongoose'); 
mongoose.Promise = global.Promise; 
mongoose.connect('mongodb://localhost:27017/homeapp'); 

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

app.use(require('express-session')({ 
    secret: 'testtest', 
    resave: false, 
    saveUninitialized: false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
var User = require('./models/User'); 
passport.use(new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

Index.jsを

var express = require('express'); 
var router = express.Router(); 
var auth = require('../controller/AuthController.js'); 

router.get('/', auth.home); 

router.get('/login', auth.login); 

router.post('/login', auth.doLogin); 

router.get('/logout', auth.logout); 

module.exports = router; 

Users.js:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var passportLocalMongoose = require('passport-local-mongoose'); 

var UserSchema = new Schema({ 
    username: String, 
    password: String 
}, {collection: 'userdata'}); 

UserSchema.plugin(passportLocalMongoose); 

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

AuthController.js:

var mongoose = require("mongoose"); 
var passport = require("passport"); 
var User = require("../models/User"); 

var userController = {}; 

userController.home = function(req, res) { 
    res.render('index', { user : req.user }); 
}; 

userController.login = function(req, res) { 
    res.render('login'); 
}; 

userController.doLogin = function(req, res){ 
    passport.authenticate('local')(req, res, function(){ 
    res.redirect('/'); 
    }); 
}; 

userController.logout = function(req, res) { 
    req.logout(); 
    res.redirect('/'); 
}; 

module.exports = userController; 

答えて

1

あなたはこのようなあなたのコードに変更を行うことができます。

userController.doLogin = function(req, res){ 
    passport.authenticate('local', { successRedirect: '/', 
            failureRedirect: '/login', 
            failureFlash: true }) 

passport.authenticate('local', { failureFlash: 'Invalid username or 
password.' }); 

};

failureFlashオプションをtrueに設定すると、戦略のverifyコールバックによって指定されたメッセージがあれば、エラーメッセージをフラッシュするようにPassportに指示します。なぜなら、認証コールバックは認証が失敗した理由を最も正確に判断できるからです。

として、私はあなたがこのように行うことができ、このためにパスポートのカスタムコールバックメソッドを使用している見てきました:

userController.doLogin = function(req, res){ 
passport.authenticate('local', function(err, user) { 
    if (err) { return next(err); } 
    if (!user) { return res.json('invalid credentials'); } 
req.logIn(user, function(err) { 
    if (err) { return next(err); } 
    return res.redirect('/'); 
}); 
})(req, res); 
}; 
+0

私は以下のコールバックを使用している場合、それは私にメッセージを与える「無効な資格情報」も、私のパスワードの場合正しいです – Larsmanson

+0

私は私の答えを編集しましたplsそれを再度チェックしてください – Sam

+0

高気圧、これは私のために働いた:) – Larsmanson

関連する問題