2017-10-16 88 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將指示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

我編輯了我的答案請再次檢查它 – Sam

+0

Thanx,這對我工作:) – Larsmanson

相關問題