2012-04-11 14 views
8

私のアプリではパスポートモジュール(github認証)を使用していますが、アクションに応じてリダイレクトしたいのですが...通常のログインかどうか、初めてログインします。私findOrCreateUser機能でパスポート:ログインとアカウント登録のリダイレクトが異なります

passport.use(new GitHubStrategy({ 
    clientID: conf.github.app_id, 
    clientSecret: conf.github.app_secret, 
    callbackURL: conf.github.callback_url 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    // asynchronous verification, for effect... 
    process.nextTick(function() { 

     // To keep the example simple, the user's GitHub profile is returned to 
     // represent the logged-in user. In a typical application, you would want 
     // to associate the GitHub account with a user record in your database, 
     // and return that user instead. 

     Models_User.findOrCreateUser(profile, function(msg){ 
     console.log("auth type:" + msg); 
     }); 

     return done(null, profile); 

    }); 
    } 
)); 

私はそれが新しいユーザーのかどうかをチェックし、すべてのDB操作を行う...テストのために私は機能は、「ログイン」または「new_registration言うだけの文字列であるMSG変数を返してみましょう"

私の質問は、パスポートの認証が完了した後に、それに応じてリダイレクトできるように(「/ welcome」または「/ back_again」)findOrCreateUserから取得する変数を「移送する」方法です。

私のアプリ内の他のパスポートコード:あなたの検証コールバックで

// GET /auth/github 
// Use passport.authenticate() as route middleware to authenticate the 
// request. The first step in GitHub authentication will involve redirecting 
// the user to github.com. After authorization, GitHubwill redirect the user 
// back to this application at /auth/github/callback 
app.get('/auth/github', 
    passport.authenticate('github'), 
    //passport.authenticate('github', { scope: ['user', 'public_repo', 'gist'] }), 
    function(req, res){ 
    // The request will be redirected to GitHub for authentication, so this 
    // function will not be called. 
    }); 

// GET /auth/github/callback 
// Use passport.authenticate() as route middleware to authenticate the 
// request. If authentication fails, the user will be redirected back to the 
// login page. Otherwise, the primary route function function will be called, 
// which, in this example, will redirect the user to the home page. 
app.get('/auth/github/callback', 
    passport.authenticate('github', { successRedirect: '/', failureRedirect: '/login' }), 
    function(req, res) { 
    res.redirect('/'); 
    }); 

答えて

9

、私はfindOrCreateUser関数がコールバックに実際のレコードを供給するように物事を変更してから、done()に至ることを通過します、

Models_User.findOrCreateUser(profile, function(user){ 
    console.log("auth type:" + msg); 
    return done(null, user); 
}); 

// take this out, use the actual model above 
//return done(null, profile); 

さて、認証後にコールバックURLを処理するとき、あなたはこのユーザレコードを確認することができますし、それが新しいだったかどうかを確認し(私はそれがここにisNew性質を持っていると仮定しています):

そうのような
app.get('/auth/github/callback', 
    passport.authenticate('github', { failureRedirect: '/login' }), 
    function(req, res) { 
    // successful auth, user is set at req.user. redirect as necessary. 
    if (req.user.isNew) { return res.redirect('/back_again'); } 
    res.redirect('/welcome'); 
    }); 
+0

ありがとう、良い答え! – toxinlabs

+2

@ Jared Hanson、それも私のために働いた。私はこれを学ぶことができるサイトまたはドキュメントがありますか? –

関連する問題