2012-07-08 3 views
1

oAuth 액세스 토큰을 가져온 다음 사용자 연락처 목록을 검색하려면 oAuth2WebServerFlow를 사용하고 있습니다. web2py를 웹 프레임 워크로 사용하고 있습니다. 다음으로 취급되는 리디렉션으로gdata.contacts.client 및 oauth2로 주소록 검색

flow = oauth2client.client.OAuth2WebServerFlow(client_id=CLIENT_ID, 
                client_secret=CLIENT_SECRET, 
                scope='https://www.google.com/m8/feeds', 
                user_agent=USER_AGENT) 
    callback = 'http://127.0.0.1:8000/Test/searcher/oauth2callback' 
    authorise_url = flow.step1_get_authorize_url(callback) 
    session.flow = pickle.dumps(flow) 
    redirect(authorise_url) 

flow = pickle.loads(session.flow) 
credentials = flow.step2_exchange(request.vars) 

내 질문은 내가 다음 연락처로 요청 권한을 부여하는 데 사용할 수는 OAuth2Credentials가 OAuth2AccessToken 객체로 위의 반환 객체 변경하는 방법은 다음과 같은과 라이브러리 :

gc = gdata.contacts.client.ContactsClient(source="") 
token.authorize(gc) 
gc.GetContacts 

나는 일반적으로 잘못된 그란 "의 oAuth2AccessTokenError 메시지를 받고, 아니 성공 다양한 방법을 시도했습니다 티". 이런 식으로 생각할 수도 있지만 더 간단한 방법이 있어야한다고 생각합니다!

token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, scope='https://www.google.com/m8/feeds', user_agent=USER_AGENT) 

    token.redirect_uri = 'http://127.0.0.1:8000/Test/searcher/oauth2callback' 
    token.get_access_token(<<code to pass the access_token out of the Credentials object??>>) 

아무도 도와 드릴 수 있습니까?

답변

4

나는이 작업을 할 수있었습니다. 사실 꽤 간단했습니다. OAuth2WebServerFlow를 사용하지 않았습니다. 어쨌든 많은 가치를 추가하지 못하는 것 같습니다. 그래서 새로운 코드는 다음과 같습니다

token = gdata.gauth.OAuth2Token(client_id, client_secret, scope, ua) 
session.token = pickle.dumps(token)     
redirect(token.generate_authorize_url(redirect_uri='http://127.0.0.1:8000/Test/default/oauth2callback')) 

def oauth2callback(): 
    token = pickle.loads(session.token) 
    token.redirect_uri='http://127.0.0.1:8000/Test/default/oauth2callback' 
    token.get_access_token(request.vars.code) 
    gc = gdata.contacts.client.ContactsClient(source='') 
    gc = token.authorize(gc) 
    feed = gc.GetContacts() 

희망으로 이어이 someoone에 도움이됩니다!

1

최신 OAuth2.0 API를 올바르게 설정하는 코드가 있다고 가정하면 Credentials -> Token 클래스를 변환하는 헤더를 수정하는 Token 클래스를 만들어이 기능을 사용할 수 있습니다. 다음과 같이

OAUTH_LABEL='OAuth ' 

#Transforms OAuth2 credentials to OAuth2 token. 
class OAuthCred2Token(object): 

    def __init__(self, token_string): 
     self.token_string = token_string 

    def modify_request(self, http_request): 
     http_request.headers['Authorization'] = '%s%s' % (OAUTH_LABEL, 
                  self.token_string) 

    ModifyRequest = modify_request 

당신은 그것을 테스트 할 수 있습니다 :이 코드는 코드 자격 증명 핸들을 사용하여 토큰 새로 고침을 처리하지 않습니다

gc = gdata.contacts.client.ContactsClient(source='') 
token = OAuthCred2Token(creds.access_token) 
gc.auth_token = token 
print gc.GetContacts() 

참고. 내 응용 프로그램에서는 연락처를 가져 오기 전에 서비스를 사용하여 간단한 호출을 만들어 자격 증명을 새로 고칠 수 있습니다.