2014-05-20 1 views
4

내 NodeJs 서버에서 페이스 북 인증을 사용하려고합니다. 나는 http://scotch.io/의 자습서에 왔고 REST 클라이언트 (우편 배달부 등)를 사용할 때 로컬로 작업하게했습니다.각도/노드/익스프레스/패스포트 - 페이스 북 (CORS)에 연결할 때의 문제

UI를 향상시키기 위해 Angular JS를 프런트 엔드로 사용했습니다. 내가 전화 할 때하지만 NodeJs 백 엔드에 주어진 내 특정 경로에 http.get를 내가 얻을 쵸메와 파이어 폭스에서 다음과 같은 오류가 :

은 XMLHttpRequest https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http% ... 0 %를로드 할 수 없습니다 2Fapi % 2Fauth % 2Ffacebook % 2Fcallback & 범위 = 이메일 & client_id = 3000000000006 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 없습니다. 따라서 'localhost : 8080'은 액세스가 허용되지 않습니다.

StackOverflow에서 여러 가지 해결책을 시도했지만 여전히 작동하지 않습니다. 내 NodeJs는 Express 4 * 및 CORS 미들웨어를 사용합니다. Angular i의 은 CORS를 활성화하는 몇 가지 방법을 찾았으나 지금까지는 아무 것도 작동하지 않습니다.

당신이 나를 도울 수 있기를 바랍니다. D 미리 감사드립니다!

+1

귀하의 게시물에있는 facebook.com-url에 대한 ajax 요청을하려고합니다. 페이스 북은 그렇게 할 수 없습니다. 그리고 나는 그것이 당신이 팝업을 통해 그 URL을 열거 나 그것에 리디렉션 할 가능성이 가장 높다는 것을 이해하지 못합니다 – WizKid

+1

이것을 해결할 수 있었습니까? 나는 같은 이슈를 가지고있다. –

+0

@LarissaLeite, 아니 아직은 없다 –

답변

0

노드/익스프레스에서도 Angular를 사용하고 있으며 다음 기능은 내 백엔드 서비스에서 사용할 수 있습니다. (현재 페이스 북에서 솔직히 사용하지 않고 있습니다.)

var allowCrossDomain = function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Access-Control-Allow-Origin'); 
    res.header("Access-Control-Max-Age", "86400"); // 24 hours 

    // intercept OPTIONS method 
    if ('OPTIONS' == req.method) { 
     res.send(200); 
    } 
    else { 
     next(); 
    } 
}; 

그런 다음, 다음과 같이 그것을 주석 app.confiure() 방법을 사용합니다 : 그것은 전에 다른 directrives를 사용하는 것이 중요합니다

// configure Express 
app.configure(function() { 
    app.use(allowCrossDomain); 
    ... 
}); 

!

+0

음, 잘 해봤 어! 지금까지는 작동하지 않습니다. 처음 호출 한 후 localhost : 8080으로 변경되었습니다. 문제는 –

+1

에서 발생합니다. 위의 질문의 경우에는 적용되지 않습니다. 문제는 페이스 북의 응답에 CORS 헤더가 설정되어 있지 않다는 것입니다. Postman이 문제가되지 않는 이유는 브라우저가 보안상의 이유로 CORS 헤더를 확인하지 않기 때문입니다. http.get 대신에 간단한 location.href를 작성하여 문제를 해결할 수 있습니다. – Andreas

+0

시도해보십시오! @ Andreas 응답을 주셔서 감사합니다 –

1

당신은 당신이 passport.authenticate 물건을 포함하여 Express 서버로 요청을 보내는 곳에서 각도 컨트롤러'window.location="http://localhost:3000/auth/facebook"';를 사용할 수 있습니다.

페이스 북의 인증 대화 상자를 AJAX 요청으로 호출 할 수 없게됩니다.

나를 위해 작동합니다!

+0

외모와 해킹처럼 느껴집니다. 그것이 유일한 방법입니다!? –

+0

예, 솔루션을 찾지 못했지만 어떻게 든 작동하도록 관리했습니다. – amey

관련 문제