2017-06-16 67 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