2013-05-31 2 views
9

facebook 인증과 함께 node, express 및 passport를 사용하고 있습니다.
나는 다음과 같은 경로 (/facebook/auth/callback는 콜백 URL)를 가지고 인증이 내가 예상 한대로 내가 페이지 auth-success 뷰를 가지고 성공여권 인증 실패로 인해 리디렉션 루프가 발생합니다.

function render(page, req, res) { 
    var user = null; 
    if (req.user) { 
     user = req.user.toObject(); 
     user.isLoggedIn = true; 
    } 
    res.render(page, { user: user }); 
} 
app.get('/auth-failure', function (req, res) { 
    res.render('auth-failure'); 
}); 
app.get('/auth-success', function (req, res) { 
    render('auth-success', req, res); 
}); 
app.get('/facebook/auth', passport.authenticate('facebook', { scope: [ 'email', 'user_about_me', 'publish_actions']})); 
app.get('/facebook/auth/callback', passport.authenticate('facebook', { failureRedirect: '/auth-failure', successRedirect: '/auth-success' })); 

. 그러나 인증이 실패하고 페이스 북이 다음으로 돌아 오면 : http://localhost:3000/facebook/auth/callback?error_code=2102&error_message=User+is+not+a+test+user+owned+by+the+application#=

나는 auth-failure보기를 얻지 못했다! enter image description here

내가 일을 확인하려고 나는에 실패 라우터를 교체 :

app.get('/facebook/auth/callback', function (req, res) { 
    res.redirect('/auth-failure'); 
}); 

enter image description here

크롬에서 실행, 나는 메시지가 : 대신에, 파이어 폭스는 나에게 페이지를 반환

그러면 auth-failure보기가 성공적으로 렌더링되었습니다.
passport.js Facebook 오류 인증의 문제점은 무엇입니까?
오류 페이지가 표시되는 이유는 무엇입니까? @ 매트 Bakaitis 코멘트에 관해서는

: 여기
나를 기능을 직렬화 및 역 직렬화입니다 :

// serialize sessions 
passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findOne({ _id: id }, function (err, user) { 
     done(err, user); 
    }); 
}); 
+0

그것은 예제 작품을 나타납니다 Firefox에서. – jhtong

+0

@toiletfreak : Firefox에서이 잘못된 동작의 이미지를 첨부했습니다. – Naor

+0

passport.serialize 또는 passport.deserialize 코드를 변경 했습니까? –

답변

1

난 당신이 사용자 정의 콜백을 사용하고 입술처럼 객체를 제공 할 필요가 있기 때문에 그것을 믿습니다. ...

app.get('/facebook/auth/callback', function(req, res, next) { 
     passport.authenticate('facebook',.............. 
+0

하지만 여기에 쓰여진 내용을 정확히 수행하고 있습니다. http://passportjs.org/guide/facebook/ – Naor

1

나는 정확히 와이어를 통해 전송 상황을 확인하기 위해 Fiddler을 불 것이다.

1

더 많은 조사를하고 있는데, passport.js를 사용하여 페이스 북 (및 다른 사람들)과 통합하기 때문에, 이미 여권 -auth (여권 - 페이스 북 사용)에 대해보고 된 open issue 일 수 있습니다.

문제를 로깅하는 사람은 line 98 of the oauth2 code에 에러 체크에 대한 해결했다

:

좋은 측정을 위해
app.get('/auth/facebook', passport.authenticate('facebook')); 
    app.get('/auth/facebook/callback', 
      , function(req, res, next) { 
        if (req.query && !req.query.error && req.query.error_code) { 
         req.query.error = true; 
        } 
        next(); 
      } 
      , passport.authenticate('facebook', { failureRedirect: '/auth-failure', successRedirect: '/auth-success' } 
    ); 

, 그것은 페이스 북과 로컬 호스트가 나열되는 설정을 다시 한 번 확인하는 것이 좋습니다도의를 올바른 위치 (들). 또한 Node.js에서 모든 것이 완벽하게 일치하는지 확인하십시오. 구성 문자열에 오타를 만들었을 때 Passport-twitter에 문제가있어서 Node.js에 오류가 발생하지 않았으므로 잡기가 힘들었습니다. 다음과 같은 error_message을 가지고 사람들과 몇 가지 링크가 있습니다 그리고 그들은 페이스 북 측 구성 문제를 표시하는 것 :

+0

코드에 오류가 있습니까? 괄호 등이 누락 되었습니까? – zehelvion

관련 문제