2013-07-30 18 views
12

/registerフォームのPOSTを送信した直後にユーザーを認証してログインしようとしています。理想的には、ユーザーに登録してから、資格情報を再度入力することなく、すぐにダッシュボードにリダイレクトすることができます。新規ユーザー登録直後のパスポート認証

私のサーバーはPassport 0.1.17を使用しており、ログインに電子メールアドレスとパスワードを使用するようにローカル戦略が設定されています。現在のコードは

app.post('/register', function(req, res) { 

    // attach POST to new User variable 
    var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name }); 

    // save registerUser Mongo 
    registerUser.save(function(err) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log('registerUser: ' + registerUser.email + " saved."); 
    } 
    }); 

    // here is where I am trying to authenticate and then redirect 
    passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), 
    res.redirect('/dashboard'); 
    }); 

このコードをリファクタリングして新しいユーザーを保存し、次に認証して最終的にダッシュボードにリダイレクトする方法はありますか?

ありがとうございます!

+2

「req.logIn」メソッドを使用して、登録後にストレート認証を行います。 – moka

+0

以前は認識していなかった 'req.logIn'を参照してくれてありがとう。より具体的なコードを提供できますか?私は上記の質問の最後のコメントの後に次のことを試みましたが、うまくいかなかった: 'req.login(registerUser、function(err){ if(err){return next(err);} return res.redirect '/ dashboard'); }); – surfearth

+0

ユーザーを逆シリアル化するために使用される詳細を提供する必要があります。通常、セッションに格納されているユーザーのIDです。 – moka

答えて

19

ここで私はおよそreq.login読んだ後思い付いたソリューションです:私は少しそれをクリーンアップし、ERRのセクションでは、より堅牢であることができることを考えてみたい

app.post('/register', function(req, res) { 
    // attach POST to user schema 
    var user = new User({ email: req.body.email, password: req.body.password, name: req.body.name }); 
    // save in Mongo 
    user.save(function(err) { 
    if(err) { 
     console.log(err); 
    } else { 
     console.log('user: ' + user.email + " saved."); 
     req.login(user, function(err) { 
     if (err) { 
      console.log(err); 
     } 
     return res.redirect('/dashboard'); 
     }); 
    } 
    }); 
}); 

が、これは機能するソリューションです。他の誰かがこれを実装していることに注意してください。ユーザー名の代わりに電子メールを使ってパスポートローカル戦略を使用するように調整されています。

+1

初心者からのクエリ:データベースにプレーンテキストとしてユーザーのパスワードを格納しているということですか?だから誰かがあなたのデータベースを取得した場合、あなたのユーザーのパスワードを読むことができますか? –

+2

@ Paul D. White:これは古かったのですが、将来の読者のためにあなたの質問に答えるためには、アプリケーションの残りの部分に透過的な方法でUserモデルクラス自体の中で暗号化を処理するのが一般的です(それは避けられないようにする利点があります)。 – Matt

+0

@Matt:素敵な、歓声が歓声。 –

関連する問題