2017-01-29 44 views
1

我正在嘗試創建一個簡單的Web應用程序,以便更好地研究它是如何工作的。這個想法是,用戶可以通過twitter登錄,之後可以訪問前端的不同功能。我可以讓用戶通過twitter進行身份驗證,但我從一個請求失去了會話。我用python3flaskflask-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()是正確的,但是當用戶登錄後,作出使用jquery $ajax得到/test,我的會話是空的。爲什麼?

回答

0

問題出在$ajax get。默認情況下,ajax不包含你的cookies,所以你必須強制使用。在$ajax必須添加:

crossDomain: true, xhrFields: { withCredentials: true }

這個力使用您的Cookie。