2017-01-29 3 views
1

Я пытаюсь создать простое веб-приложение, чтобы лучше изучить, как он работает. Идея состоит в том, что пользователь может войти в систему через твиттер, а после этого может получить доступ к различным функциям на передней панели. Я могу сделать аутентификацию пользователя через твиттер, но я потерял сеанс от одного запроса к другому. Я использую python3flask и flask-oauthlibКол-во: потерял сеанс в спокойном сервере

from flask import Flask, request, url_for, session, redirect, flash 
from flask_cors import CORS 
from flask_oauthlib.client import OAuth 

app = Flask(__name__) 
cors = CORS(app) 
oauth = OAuth() 

@app.route('/login') 
def login(): 
    callback_url = url_for('oauthorized', next=request.args.get('next')) 
    return twitter.authorize(callback=callback_url or request.referrer or None) 

@app.route('/logout') 
def logout(): 
    session.pop('twitter_oauth', None) 
    return redirect(app.config['FRONT_END_URL']) 

@app.route('/oauthorized') 
def oauthorized(): 
    frontend_url = app.config['FRONT_END_URL'] 
    resp = twitter.authorized_response() 

    if resp is None: 
     flash('You denied the request to sign in.') 
     return redirect(frontend_url) 
    elif resp['screen_name'] not in allowed_twitter: 
     flash('You dont have premission') 
     return redirect(frontend_url) 

    access_token = resp['oauth_token'] 
    session['access_token'] = access_token 
    session['screen_name'] = resp['screen_name'] 

    session['twitter_token'] = (
     resp['oauth_token'], 
     resp['oauth_token_secret'] 
    ) 

    flash('You were successfully logged in') 
    return redirect(frontend_url + "/accionDirecta") 

@app.route('/test') 
def test(): 
    print(session) # Is always empty 

    access_token = session.get('access_token') 
    if access_token is None: 
     return("Not login") 
    else: 
     return("login") 

print(session) внутри oauthorized() правильно, но когда пользователь после входа в систему, сделать, чтобы получить /test с помощью jquery $ajax я сессия пуст. Зачем?

ответ

0

Проблема в $ajax get. По умолчанию ajax не включает ваши файлы cookie, поэтому вы должны принудительно использовать. В $ajax вы должны добавить:

crossDomain: true, xhrFields: { withCredentials: true }

И эта сила, чтобы использовать куки.

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