2017-04-18 3 views
1

내가 달성하고자하는 것은 여권을 사용하여 아약스를 통해 사용자 인증을 수행하는 것입니다. 여권을 사용하는 권장 방법은 태그를 사용하여 실행되는 GET 요청을 통해 인증 프로세스를 시작하는 것입니다. 성공 또는 실패한 인증 후에는 새 페이지로 재 지정됩니다. 이제 html 링크를 사용하여 경로를 트리거하는 대신 아약스를 통해 수행하려고합니다.아약스를 통한 여권 인증

// route for facebook authentication and login 
app.get('/auth/facebook', passport.authenticate('facebook', { scope : ['email'] })); 

// handle the callback after facebook has authenticated the user 
app.get('/auth/facebook/callback', (req, res, next) => { 
    passport.authenticate('facebook', (err, user, info) => { 
    req.login(user, function(err) { 
     if(err) return next(err); 
     return res.status(200).json({ 
     success: "All good man!" 
     }); 
    }) 
    })(req, res, next); 
}); 

동안 브라우저에서 다음과 같습니다

XMLHttpRequest cannot load [the facebook auth URL]' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:8080' is therefore not allowed access. 

은 관련 서버 측 코드 : 여기서 문제는이 같은 passport-facebook 같은 타사 인증 전략을 시도 할 때 나는 CORS 오류가 있다는 것입니다 단순히 수행
axios.get('/auth/facebook').then((response) => { 
    console.log(response); 
}); 

나는 several 유사한 questions을 발견하지만, 그들 중 누구도 만족스러운 대답을 것 같았다. 실제로이 작업을 수행 할 수있는 방법이 있습니까? 아니면 현명한 해결 방법? html 링크를 사용하여 경로가 트리거 된 경우에도 여전히 JSON 응답을 다시 보내는 방법일까요?

답변

0

확실하지 않습니다. 첫째, Facebook에서 CORS를 사용할 수없는 경우 JSONP와 같은 것을 사용하는 것을 제외하고는 할 수있는 일이 많지 않지만 사용 설정해야합니다. 하지만 더 중요한 것은 로그인을하는 방법은 사용할 수있는 토큰을 돌려주는 것이 아니라 쿠키를 저장하는 것입니다. 이를 위해서는 자신의 도메인에 있어야하며 Ajax를 사용하여 위조 할 수는 없습니다. 마지막으로, 동일한 로그인/승인 양식을 항상 보여주기 위해 사용자와 신뢰를 쌓는 방법의 일부라고 생각하므로이 문제를 방지 할 수있는 모든 조치를 취할 것이라고 생각합니다.

이 모든 가상, 마음, 난 당신이 내가 모르는 것을 아는 것처럼 :) 실제로 일을하지만

+0

흠 ... 나에게 소리 :) 언급 도구를 사용하지 않은됩니다 후속 API 요청에 사용할 토큰을 돌려줍니다. 또한, 나를 혼란스럽게하는 것은 실제 인증 절차가 서버를 통해서만 발생한다는 것입니다. 브라우저에서 일어나는 유일한 일은 (GET/auth/facebook)을 촉발시키는 절차의 시작입니다. 내 이해에 나머지 인증 (같은 로그인/인증 양식) 정확히 동일해야합니다. 그러나 나는 거기에서 뭔가를 놓치고있는 것처럼 느껴집니다. 어쨌든 나는 AJAX가없는 해결 방법을 발견했다고 생각합니다. :) 그러나 감사합니다! – Flavio

+0

안녕하세요 @ 플라 비오, 해결 방법을 알려주시겠습니까? 나는 비슷한 상황에 처해있다. – mdeang2