2017-06-16 66 views
0

我想尝试一个本地策略护照的例子。当我做不正确的密码POST请求(我只有在这一刻单个数据库记录),它仍然结束了执行我的成功函数:护照本地策略执行successcase总是

function (err, user) { 
    console.log("Login successful"); 
    res.redirect('/loggedIn'); 
} 

在passport.authenticate.Where定义我该怎么错了?何时调用failureRedirect。

var express = require('express'); 
var app = express(); 
var http = require('http'); 
var server = http.Server(app); 


var querystring = require('querystring'); 
var bodyParser = require('body-parser'); 
var passport = require('passport'); 

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

var users = { 
    user : {username : "abc", password : "123"}, 

    findByUsername (username, cb) { 
    return cb(null, this.user); 
    } 
}; 

app.use(bodyParser.json()); 
app.use(passport.initialize()); 
app.use(passport.session()); 


passport.use(new Strategy(
    function verify (username, password, done) { 
     users.findByUsername(username, function (err, user) { 
     if (err) { return done(err);} 

     if (!user) {return done(null, false);} 

     if (user.password != password) {return done(null, false);} 

     return done(null, user); 

     }); 


    } // close verify function 


)); 

app.get('/signupError', function (req, res) { 
    var result = {error : 'You entered incorrect username/password'}; 
    res.status(200).json(result); 
}); 

    app.get('/loggedIn', function (req, res) { 
    var result = {error : 'You entered correct username/password'}; 
    res.status(200).json(result); 
}); 

app.post('/login', function (req, res) { 
passport.authenticate('local', { failureRedirect: '/signupError' }, 
    function (err, user) { 

    console.log("Login successful"); 
    res.redirect('/loggedIn'); 
    })(req,res); 
}); 

    server.listen(80, function() { 
     console.log("listening") ; 
    }); 

回答

0

尝试passport.use

passport.use(new Strategy({usernameField: 'username', 
    passwordField: 'password', 
    session: false 
    }, 
    function verify (username, password, done) { 
    users.findByUsername(username, function (err, user) { 
    if (err) { return done(err);} 

    if (!user) {return done(null, false);} 

    if (user.password != password) {return done(null, false);} 

    return done(null, user); 

    }); 
+0

都能跟得上使用这种说法。这没有帮助。 – j10