2013-01-01 16 views

答えて

7

authリダイレクトルートとコールバックルートの両方が関数(req、res、next)でpassport.authenticate()をラップする必要があります。

私はカスタムコールバック

とカスタムcallbackURL

3

ためhttps://github.com/jaredhanson/passport-facebook/issues/2のコメント私はこのソリューションを使用するためにhttp://passportjs.org/guide/authenticate/の例を踏襲し、それは非常に簡単です。最後のURLをセッションに保存してから収集します。あなたが直接fbにコールバックURLを渡す場合、あなたは非常にばかばかしいすべての異なるルートを許可する必要があります。ただ、ギャルの答えにフォローアップ

app.get '/auth/facebook/', routesService.clean, (req, res, next) -> 
    req.session.redirect = req.query.redirect if req.session? && req.query.redirect? 
    passport.authenticate('facebook', { scope: ['user_friends'] }) req, res, next 
    return 

    app.get '/auth/facebook/callback', passport.authenticate('facebook', failureRedirect: '/login'), (req, res) -> 
     # Successful authentication, redirect home. 
     if req.session?.redirect? 
      rediredUrl = req.session.redirect 
      delete req.session.redirect 
      res.redirect '/#!'+ rediredUrl 
     else 
      res.redirect '/' 
     return 
1

は、ここではその組み合わせたソリューションです:あなたは、具体的には、ユーザがログインする必要が

app.get('/auth/facebook', (req, res, next) => { 
    passport.authenticate('facebook')(req, res, next) 
}) 

app.get("/auth/facebook/callback", (req, res, next) => { 
    passport.authenticate('facebook', (err, user, info) => { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login')} 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.uid) 
    }); 
    })(req, res, next) 
}) 

関連する問題