【问题标题】:username or password failure message in Passport.jsPassport.js 中的用户名或密码失败消息
【发布时间】:2017-10-16 20:37:40
【问题描述】:

我使用 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());

索引.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;

【问题讨论】:

    标签: node.js express login passport.js


    【解决方案1】:

    你可以像这样修改你的代码:

    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);
    };
    

    【讨论】:

    • 如果我使用下面的回调,即使我的密码正确,它也会给我“无效凭据”消息
    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2020-04-06
    相关资源
    最近更新 更多