2013-06-25 4 views
3

Я создаю веб-приложение на python, используя флеш-фрейм, чтобы запросить токен доступа из Facebook с помощью SDK supplied in their site.python: GraphAPIError: недопустимый токен доступа OAuth

Токен доступа возвращается, и он правильно установлен в объекте GraphAPI. Тем не менее, она возвращается следующее сообщение об ошибке:

GraphAPIError: Invalid OAuth access token.

Если я запрашиваю граф API из моего локального окружения питона, используя один и тот же маркер доступа, он работает просто отлично. Кажется, что проблема возникает при выполнении на веб-сервере.

См фрагмент кода ниже:

@app.route('/facebook') 
def fb(): 
    if 'token' in session: 
    graph = facebook.GraphAPI(session['token']) 
    return graph.get_object("me") 


@app.route('/facebook/login') 
def fblogin(): 
    code = request.args.get('code','') 
    if(code == ""): 
    args = dict(client_id=app_id, redirect_uri=request.base_url) 
    #args = dict(client_id=app_id, redirect_uri=request.url_root + 'facebook') 
    return redirect(
    "https://graph.facebook.com/oauth/authorize?" + 
    urllib.urlencode(args)) 
    else: 
    token = facebook.get_access_token_from_code(code, request.base_url, app_id, app_secret) 
    session['token'] = [token.itervalues().next()] 
    return redirect (request.url_root + 'facebook') 

Кто-нибудь сталкивался это раньше, и/или может дать некоторое представление?

+0

может звучать как глупый вопрос, но вы уверены, что маркер доступа являются одна и та же? Если вы разрабатываете локально и в производстве, вы должны использовать разные приложения. – phwd

+0

@phwd: Да. Они - одно и то же приложение, используя одни и те же ключи. И мне удалось получить токен доступа и вставить его в локальный код. – Cassio

ответ

1

Ok, 2 проблемы, которые мне удалось исправить в этом коде и заставить его работать:

1) Следующая строка кода делает список, то почему объект GraphAPI не в состоянии определить действительный доступ токен:

session['token'] = [token.itervalues().next()] 

2) Следующая строка кода дает ошибку, указывающую, что «dict» не может быть вызвано. Это происходит потому, что возвращается переменная является словарь, и для того, чтобы быть возвращены как вид, нужно сначала преобразовать его в строку:

return graph.get_object("me")