2015-09-07 2 views
0

Я разрабатываю приложение на питоне, использующем YT API. Я решил переместить его в Интернет, и я использую Flask. Я взял пример auth из руководства Google. В целях тестирования я пытаюсь создать список воспроизведения после аутентификации. Это выглядит следующим образом:ошибка с флеш-сессией во время аутентификации youtube api v3

@app.route('/') 
def index(): 
    if 'credentials' not in flask.session: 
     return flask.redirect(flask.url_for('oauth2callback')) 
    credentials = client.OAuth2Credentials.from_json(flask.session['credentials']) 
    if credentials.access_token_expired: 
     return flask.redirect(flask.url_for('oauth2callback')) 
    else: 
     http_auth = credentials.authorize(httplib2.Http()) 
     yt_service = discovery.build('youtube', 'v3', http_auth) 
     playlists_insert_response = yt_service.playlists().insert(
     part="snippet,status", 
     body=dict(
     snippet=dict(
      title="Test Playlist", 
      description="A private playlist created with the YouTube API v3" 
     ), 
     status=dict(
      privacyStatus="private" 
     ) 
     ) 
    ).execute() 

    return playlists_insert_response["id"] 


@app.route('/oauth2callback') 
def oauth2callback(): 
    flow = client.flow_from_clientsecrets('youtube/client_secret.json',scope='https://www.googleapis.com/auth/youtube',redirect_uri=flask.url_for('oauth2callback', _external=True)) 
    if 'code' not in flask.request.args: 
     auth_uri = flow.step1_get_authorize_url() 
     return flask.redirect(auth_uri) 
    else: 
     auth_code = flask.request.args.get('code') 
     credentials = flow.step2_exchange(auth_code) 
     flask.session['credentials'] = credentials.to_json() 
     return flask.redirect(flask.url_for('index')) 

Таким образом, в браузере я аутентификация, принять permisions приложения, а затем я вижу 500 внутренней ошибки с ouath2callback URI и параметром кода. В журнал ошибок я вижу это:

2015-09-07 10:23:08,319 :Successfully retrieved access token 
2015-09-07 10:23:08,330 :Exception on /oauth2callback [GET] 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1358, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1344, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/Kraxi/youtube/playlist.py", line 63, in oauth2callback 
    flask.session['credentials'] = credentials.to_json() 
    File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 339, in __setitem__ 
    self._get_current_object()[key] = value 
    File "/usr/local/lib/python2.7/dist-packages/flask/sessions.py", line 57, in _fail 
    raise RuntimeError('the session is unavailable because no secret ' 
RuntimeError: the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret. 

Я tihnk это может быть что-то неправильно с Колба сессии - может быть типа seassion? Использование колбы 0.10

Любые идеи, пожалуйста?

ответ

1

Для использования sessions вам необходимо установить SECRET_KEY.

Выдержка из docs:

# set the secret key. keep this really secret: 
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT' 
+0

Так что я должен установить app.secret_key значения в некоторых ситуациях или просто в * .py файла, где у меня есть остальная часть кода? – Kraxi

+0

Nvm, это сработало. Большое спасибо Паоло! – Kraxi

+0

@ Kraxi, когда вы устанавливаете все остальные настройки конфигурации, например, когда вы впервые создаете 'приложение' или в отдельный файл конфигурации, загружаемый при создании' app' :) –

Смежные вопросы