2011-03-05 3 views
7

그리스 몽키 스크립트에서 아주 간단한 GAE 인스턴스를 사용하고 있습니다. 지난 몇 개월 동안이 작업은 성공적 이었지만 이제는 'continue'위치에 경로가 추가되어 로그인 프로세스가 중단됩니다.Google App Engine이 로그인 중에 '계속'위치에 경로를 추가하는 이유는 무엇입니까?

기본 워크 플로우, 사용자가 자신의 Google 계정에 로그인되어 있지만 GAE 인스턴스에 대한 자신의 토큰이 초과되었습니다 있다는 가정하에 :

  1. 사용자가 설치 GM 스크립트로 페이지 A를 엽니 다.
  2. GM 스크립트가 실행되고 GM_xmlhttpRequest()를 사용하여 GAE 인스턴스에 액세스하려고 시도합니다.
  3. GAE 인스턴스는 "login_needed | <loginurl>"을 반환합니다. GM 스크립트는 loginurl을 추출하고 그것에 window.location을 설정합니다.
  4. 사용자는 loginurl로 리디렉션되고 결국 A로 돌아갑니다. 그러나 이번에는 실제 데이터가 GM_xmlhttpRequest()에 의해 반환됩니다.

사용자가 이제 대상 사이트에 (404)을 제공하는 loginurl 플러스 일부로 리디렉션 될 때 마지막 단계는 더 이상 작동합니다.

GAE 코드는 코드 화면의 절반 정도입니다. 인증 관련 코드는 이것이다 :

if not users.get_current_user(): 
    self.response.headers['Content-Type'] = 'text/plain' 
    self.response.out.write('login_needed|'+users.create_login_url(self.request.get('uri'))) 

다음과 같이 요청의 순서는 모든 리디렉션에 의해 발생한다 :

  • GET https://mygaeinstance.appspot.com/?uri=https : //targetsite.com/
  • GET https://www.google.com/accounts/ServiceLogin?service=ah & 수동 = 사실 & 계속 = HTTPS : //appengine.google.com/ _ 아/conflogin % 3Fcontinue % 3Dhttps : //targetsite.com/ & ltmpl = GM의 & ahname = MyGAEInstance & SIG = < 일부 시그 >
  • GET https://appengine.google.com/ _ 아/conflogin? 계속 = HTTPS % 3A % 2F % 2Ftargetsite.com % 2F & PLI = 1 = & 인증 토큰 < 일부를 Base64 인증 >
  • GET https://targetsite.com/ _ 아/conflogin? 상태 = < 일부를 Base64 상태 >

targetsite.com은 해당 경로가 마음에 들지 않으므로 볼 수있는 것처럼 'https://targetsite.com/'인 appengine.google.com에 처음 '계속'인수가 전달되지 않았습니다. ". 무엇이 잘못되었으며 어떻게 해결할 수 있습니까?

+0

목록에있는 모든 URL은 내부 App Engine URL을위한 것입니다. targetsite.com으로 어디로 리디렉션됩니까? –

+0

GAE의 사용자 API는 GAE 웹 사이트의 사용자를 인증하기위한 것입니다. 왜 사용자를 다른 웹 사이트로 리디렉션합니까? – olivierlemasle

+0

@NickJohnson : targetsite.com으로 다시 리디렉션하는 것은 [create_login_url()] (https://code.google.com/appengine/docs/python/users/functions.html#create_login_url) 호출의 일부입니다. '계속', 그들은 그것을 'dest_url'이라고 부릅니다. 로그인이 완료되면 GAE가 리디렉션되는 곳입니다. 이것이 갑자기 작동하지 않는 이유를 알 수 없으면이 인수를 사용하여 GAE 인스턴스로 리디렉션 한 다음 다른 리디렉션을 사용하여 사용자를 targetsite.com으로 다시 리디렉션하는 것이 좋습니다. 지금까지는 하나의 요청/응답주기를 저장하지 않고도 할 수있었습니다. –

답변

3

App Engine의 로그인 흐름이 최근에 변경되어서 앱의 자체 도메인 외부에있는 계속 URL로 로그인하면 관찰중인 것과 같은 잘못된 리디렉션이 발생하는 문제가 발생했습니다.

Google은이 문제를 해결하기 위해 노력하고 있습니다. 그 동안 해결 방법은 앱에서 리디렉션 처리기를 설정하는 것입니다.continue 매개 변수의 대상을 만들고 실제 대상에 최종 리디렉션을 보내도록합니다.

+4

이 문제와 관련된 모든 티켓/문제? –

+1

아직 깨진 btw., 진행 상황이 있습니까? :) –

+1

이 문제를 해결할 계획이 아직 있습니까? 이슈 트래커에 있습니까? –

관련 문제