2017-03-10 8 views
0

次のプログラムは、ユーザ名/パスワード認証にpassportjsを使用しています。私は間違いをしているわけではありませんが、私はいつも失敗ページにリダイレクトされます。つまりログインページに戻ります。パスポートミドルウェアによる認証に失敗することはありません

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


var app = express(); 

app.listen(3000); 

app.use(express.static(__dirname+'/public')); 
app.use(passport.initialize()); 
app.use(passport.session()); 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    console.log(username + ':username'); 
    console.log(password + ':password'); 
    return done(null, [{username:'foo'}]); 
    } 
)); 

app.get('/login',(req,resp) => { 
    var options = { 
     root: __dirname + '/public/' 
    }; 

    resp.sendFile('login.html',options); 
}); 

app.post('/login', 
    passport.authenticate('local', { successRedirect: '/',failureRedirect: '/login'}) 
); 

私はpassportjsの動作を理解しようとしていると私はミドルウェアpassport.use(new LocalStrategy(が呼び出されることは決してありませんことを参照してください。理由はわかりませんが、障害の根本原因になる可能性があります。

答えて

0

多分パスポートが必要です。セッションはパスポート設定の前にapp.use(express.session({ secret: 'keyboard cat' }));を追加してみてください。

あなたは、だから私は、POSTリクエストを解析するためにpassportjsで必要とされるbody parserモジュールがありませんでしたあなたはlocal

app.post('/login', 
    passport.authenticate('local', { successRedirect: '/',failureRedirect: '/login'}) 
); 
+0

まだミドルウェアに入っていません。 –

0

この例では、名前でこの戦略を呼び出すあなたの戦略に名前を付け、ユーザー

passport.serializeUser(function(user, done) { 
    done(null, user); 
}); 

passport.use('local', new LocalStrategy(
    function(username, password, done) { 
    console.log(username + ':username'); 
    console.log(password + ':password'); 
    return done(null, [{username:'foo'}]); 
    } 
)); 

をシリアル化しなければなりません。ここに完全なコードがあります:

var passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy 
    , express = require('express') 
    , bodyParser = require('body-parser'); 


var app = express(); 

app.listen(3000); 

app.use(express.static(__dirname+'/public')); 
app.use(bodyParser.urlencoded({ extended: false }));// parse application/x-www-form-urlencoded 
app.use(bodyParser.json()); // parse application/json 
app.use(passport.initialize()); 
app.use(passport.session()); 

passport.use('local',new LocalStrategy(
    function(username, password, done) { 
    console.log(username + ':username'); 
    console.log(password + ':password'); 
    return done(null, {username:username}); 
    } 
)); 

passport.serializeUser(function(user, done) { 
    done(null, user.username); 
}); 

passport.deserializeUser(function(id, done) { 
    done(null, user); 
}); 


app.get('/login',(req,resp) => { 
    var options = { 
     root: __dirname + '/public/' 
    }; 

    resp.sendFile('login.html',options); 
}); 

app.post('/login', 
    passport.authenticate('local', { successRedirect: '/',failureRedirect: '/login'}) 
); 
関連する問題