2017-10-16 16 views
0

J'ai un identifiant créé dans Express avec l'utilisation de Passport.js. Maintenant j'ai tout configuré et quand le nom d'utilisateur et le mot de passe sont corrects il redirigera vers la page d'utilisateur. Mais maintenant je veux montrer un message quand les informations d'identification sont incorrectes. En ce moment, elle conduit à une page blanche avec un message automatique de 'non autorisés'message d'échec de nom d'utilisateur ou de mot de passe dans Passport.js

Voici ma configuration 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; 

Répondre

1

Vous pouvez faire une modification dans votre code comme ceci:

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

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

}; La définition de l'option failureFlash sur true demande à Passport de faire clignoter un message d'erreur en utilisant le message donné par le callback de vérification de la stratégie, le cas échéant. C'est souvent la meilleure approche, car le rappel de vérification peut déterminer avec plus de précision l'échec de l'authentification.

Comme, je l'ai vu que vous utilisez la méthode de rappel personnalisé passeport pour cela, vous pouvez faire comme ceci:

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

Si je le rappel ci-dessous, il me donne le message « Identifiants non valides » même si mon mot de passe est correct – Larsmanson

+0

j'ai édité ma réponse pls vérifier encore – Sam

+0

Thanx, cela a fonctionné pour moi :) – Larsmanson