2013-07-29 3 views
0

내 사이트에서 몇 가지 기본 OAuth Facebook 로그인을 얻으려고합니다.ColdFusion/Railo로 이전 한 경우 세션이 설정되지 않았습니다.

사용자를 리디렉션하기 바로 직전에 세션 변수를 설정 한 다음 다시 사이트에 반환했는지 확인합니다.

페이스 북에 로그인하여 리턴 할 수 있지만, 일단 나는 세션 변수가 존재하지 않습니다.

전적으로 난처합니다!

lock scope="session" type="exclusive" timeout="30" { 
    session.source["state"] = createUUID(); 
} 

// BUG? 
// http://helpx.adobe.com/coldfusion/kb/missing-session-variables-using-cflocation.html 
if (isDefined("session.source.state")) { 

    location(url="https://www.facebook.com/dialog/oauth?client_id=#application.fbappid#&redirect_uri=#application.fbredirecturl#&state=#session.source["state"]#&scope=email,publish_actions", addtoken="true"); 

} 

재미 것은 session.source["state"] 페이스 북에 URL에 전달됩니다 ...입니다 ...하지만 반환에, 그것이 사라 졌 나타납니다 :이 코드를 살펴 보자!

이것은 정말 이상한 행동입니다.

자바 스크립트로 리디렉션하는 것은 옵션이 아닙니다. 서버 측이어야합니다.

누구나 단서가 있습니까? 나는 Railo를 사용하고있다.

감사합니다. Mikey.

+1

첫째, 실제 생활에서 사용자가 페이스 북을 길게 읽으면 세션 시간이 초과 될 수 있습니다. 두 번째로, 세션 범위를 cfdump하여 실제 무엇이 있는지 확인하십시오. –

+0

@DanBracuk 재배치가 발생하므로 리다이렉트가 예상대로 UUID를 보여주기 전에 세션이 정의되고 덤프됩니다. 나는 페이스 북에 10 초 이상 있지 않으며 세션은 30 분으로 설정된다. 또한 다른 세션 바는 여전히 웹 사이트의 다른 곳에서 작동합니다. 반환 할 때 세션을 덤프하는 것은 다른 vars를 표시하지만 리디렉션 전에 생성 된 것은 표시하지 않습니다. –

+0

보안 (https) 서버에서 이러한 현상이 발생합니까? https://issues.jboss.org/browse/RAILO-2773 –

답변

0

재미있는 것은이이 세션 바르에 일이 안되는 session.source["state"] 페이스 북

로 URL에 전달됩니다 ...입니다. 틀린 것이 있어야합니다. 코드를 추적하거나 코드를 게시하십시오.

+0

아, 그렇습니다. 세션이 확인 된 후 Facebook으로 전달 된 것을 확인했습니다. 다시 리디렉션 할 때 ... session.source [ "state"]을 (를) 찾을 수 없습니다. 그것은 완전히 죽는다. 나는 이것을 cflocation (위치) 문제로 생각한다. 코드에 대한 내 의견의 링크를 참조하십시오. 여전히 관련 버그입니까? 그렇다면 서버 측에서이 문제를 해결하는 방법은 무엇입니까? –

+0

@MichaelGiovanniPumo cflocation을 수행하기 전에 세션이 이미 시작된 상태라면 사용자가 브라우저에서 CFID/CFTOKEN을 설정하는 데 문제가 없어야합니다. CFID/CFTOKEN의 올바른 콤보가 전송되는 한 CF가 올바른 세션을 가져올 수 있습니다. 그러나 세션의 아무 것도 URL로 텍스트로 전달해서는 안됩니다. – Henry

+0

나는 addtoken = "true"및 addtoken = "false"를 시도했지만 둘 다 작동하지 않는 것 같습니다. 당신이 말한 것이 이것입니까? –

1

facebook이 사용자를 돌려주는 콜백 URL은 무엇입니까? 내가 묻는 이유는 사용자를 다른 응용 프로그램으로 리디렉션하고있는 것일 수도 있습니다.

가장 좋은 방법은 세션과 사용자가 반환 된 페이지를 설정하는 페이지에서 application.applicationname을 덤프하는 것입니다. 일치하는지 확인하십시오. 그렇지 않으면 세션이 이어지지 않습니다.