2011-05-09 5 views
0

Google App Engine 개발에 이상한 문제가 발생했습니다. 게시물 요청에 본문 내용이있을 때마다 앱 엔진이 내 계정을 인증하지 못했지만 요청을받습니다. 누구든지 나를 도울 수 있습니까? 크롬 확장 개발에서 oauth 라이브러리 ChromeExOAuth를 사용하고 있습니다.Google AppEngine 개발 중 OAuth 문제가 발생했습니다.

oauth.authorize(function(){ 
     var request = { 
      'method': 'POST', 
      'headers': { 
       "Content-Type" : "application/x-www-form-urlencoded" 
      }, 
      'parameters': { 
      }, 
      'body': "a=b" 
     }; 
     oauth.sendSignedRequest("http://mytabshub.appspot.com/tabshub", function(resp, xhr){ 
      console.log("responding from test server", xhr.responseText); 
     }, request); 
    }); 
+0

"get request works"는 access_token에 대한 request_token을 교환 할 수 있었습니까? – Jeyara

+0

예! 그것은 교환했다. 라이브러리는 쿼리 문자열에서 액세스 토큰을 전달합니다. 하지만 난 애플 리케이션 엔진은 게시물 요청에서 쿼리 문자열에서 계정을 auth하지 않는 것 같아요. 따라서 인증 프로세스가 실패했습니다. 너무 이상 해요! – itemon

+0

Google 앱 엔진 용 앱을 개발하지 않았습니다. 하지만 난 내 자신의 oauth .net 라이브러리와 digg 통합에 동일한 문제가 있습니다. 그런 다음 트위터로 테스트 해 보았지만 정상적으로 작동합니다. 그러나이 문서의 부족은 이것을 분류하지 못했습니다. 트위터 같은 다른 서비스를 확인 했습니까? 이렇게하면 문제를 격리하는 데 도움이됩니다. – Jeyara

답변

0

POST 요청의 경우 요청 본문에 url-encoded oauth 매개 변수를 전달해야합니다. SDK에의 relavant 코드는이 (dev_appserver_oauth.py)입니다 :

def _Parse(self, request, base_env_dict): 
    """Parses a request into convenient pieces. 

    Args: 
    request: AppServerRequest. 
    base_env_dict: Dictionary of CGI environment parameters. 

    Returns: 
    A tuple (method, path, headers, parameters) of the HTTP method, the 
    path (minus query string), an instance of mimetools.Message with 
    headers from the request, and a dictionary of parameter lists from the 
    body or query string (in the form of {key :[value1, value2]}). 
    """ 
    method = base_env_dict['REQUEST_METHOD'] 
    path, query = dev_appserver.SplitURL(request.relative_url) 
    parameters = {} 
    if method == 'POST': 
    form = cgi.FieldStorage(fp=request.infile, 
          headers=request.headers, 
          environ=base_env_dict) 
    for key in form: 
     if key not in parameters: 
     parameters[key] = [] 
     for value in form.getlist(key): 
     parameters[key].append(value) 
    elif method == 'GET': 
    parameters = cgi.parse_qs(query) 
    return method, path, request.headers, parameters 

는 쿼리가 GET 요청으로 해석됩니다 참조하십시오. POST의 경우 본문에 있어야합니다.

+0

내가 응용 프로그램/x-www-form-urlencoded 콘텐츠 형식으로 게시물 요청을 보낼 때마다 몇 가지 단서를 찾을 수 있습니다, 응용 프로그램 엔진 날 거부하고 인증 실패 불평. ... – itemon

+0

"요청 본문에 oauth 매개 변수 url-encoded를 전달해야합니다"에 대한 참조가 있습니까? RFC는 주문 및 선호도에 대해서만 설정하는 것으로 보입니다. – Rene

관련 문제