2013-12-17 3 views
13

にハング私はおそらく最も簡単な認証だろうと思ったものを設定しています - ログイン画面上のサイトの負荷、ユーザーは、私はパスポートを使用しています提出の上、フォームでの資格情報を入力します。 JSとSequelizeを実行して資格情報を確認します。ほとんどのものは、さまざまなチュートリアルやPassportのWebサイトからコピーされています。 はどんなに私は何をすべきか、変更または試みは、しかし、サイトはちょうど私が、フォームが送信ボタンをクリックするとすぐにハングアップしません。開発ツールのネットワークタブでは、/ loginへの投稿リクエストを保留中として表示しています。よりPassport.js苦境 - フォーム送信

追加される可能性のある問題をすべて取り除くために、Sequelizeを取り除き、passport github pageのローカル使用例のハードコードされたユーザーを使用しました。それでも、Sequelizeへの変更は問題ではありませんでした。

私はそれがダム何かだと確信しています。私は私のフォームは「ユーザ名」と「パスワード」を送っていたことを確認作るような、明白な解決策を試してみました。

私のフォームは次のようになります。get要求にOK

var login = require('../app/controllers/login'); 
app.get('/', login.index); 
app.post('/login', login.auth); 

ページのロード:ノードで

form(method="post", action="/login") 
    fieldset 
    legend Please Log In 
    label(for="username") Username: 
    input#username(type='text', name="username", autocomplete="off") 
    label(for="password") Password: 
    input#password(type='password', name="password") 
    button#login(type="submit") Log In 

私app.jsはこれを含んでルータを使用しています。ポストの上には、これに指示します。

exports.auth = function (req, res, next) { 
    console.log(req.body); 
    passport.authenticate('local', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
    }); 
}; 

にconsole.log(req.body)は、フォームの値を示し、細かいアップしますので、我々はその時点までOKです。しかし、後は何もない。これが最後の部分である:

passport.use(new LocalStrategy(
    function(username, password, done) { 
    console.log('local strat invoked'); 
    findByUsername(username, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false, { message: 'Unknown user ' + username }); } 
     if (user.password != password) { return done(null, false, { message: 'Invalid password' }); } 
     return done(null, user); 
    }); 
    } 
)); 

私はこのfindByUsername機能(ストレートパスポートgithubのページで上記のポストからコピー&ペースト)を持つユーザーのためのDBを確認するためにSequelizeを使用したコードをスワップアウトが、 console.log(「ローカルストラト呼び出さ」)は決してまで来ていないとして、私も問題そのポイントの後に何を推測していませんよ。

また、passport.serializeUserとpassport.deserializeUserも含まれていますが、私が抱えている段階で問題があるとは想像もできません。

私はこの作業を取得するために行方不明です何ステップの任意のアイデア?

答えて

27

パスポートを使用すると、ルートハンドラ関数でそれを埋め込んだ場合、あなたはそれを呼び出すために必要な、ミドルウェアです:

exports.auth = function (req, res, next) { 
    console.log(req.body); 
    passport.authenticate('local', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
    })(req, res, next); // <-- NEED TO INVOKE WITH req, res, next 
}; 

または、より簡単に推奨されるアプローチである(ミドルウェアとしてそれを使用する:

exports.auth = passport.authenticate('local', { 
    successRedirect: '/home', 
    failureRedirect: '/', 
    failureFlash: true 
}); 
+0

呼び出しが問題でしたありがとうございました!ミドルウェアの方法は決してうまくいきませんでしたので、私はそれを再訪する必要があります。 – DrHall