Passport.js中的用户名或密码失败消息

时间:2017-10-16 10:57:37

标签: node.js express login passport.js

我使用Passport.js在Express中创建了一个登录名。现在我已经完成了所有设置,当用户名和密码正确时,它将重定向到用户页面。但是现在我想在凭据不正确时显示一条消息。现在,它会显示一个空白页面,其中包含未经授权的

的自动消息

这是我的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 个答案:

答案 0 :(得分:2)

您可以在代码中进行修改,如下所示:

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

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

};

将failureFlash选项设置为true会指示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);
};