2017-03-01 1 views
0

Utiliser Django 1.10incapable de définir et récupérer les variables de session

Mon middleware est défini comme suit:

MIDDLEWARE = [ 
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 

'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware', 


'wagtail.wagtailcore.middleware.SiteMiddleware', 
'wagtail.wagtailredirects.middleware.RedirectMiddleware', 
] 

je me suis assuré d'inclure la session MOTEUR

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' 

J'ai mon client secret et id défini comme suit:

os.environ['CLIENT_SECRET'] = 'something' 
os.environ['CLIENT_ID'] = 'something' 

et mes vues sont configurés pour faire un rappel, les variables de session magasin comme suit:

def potato_oauth_callback(request): 


    POTATO_OAUTH2_TOKEN_ENDPOINT = "https://login.potato.com/potatoservices/potatooauth2/potatotoken" 
    POTATO_SECRET = get from env variables 
    POTATO_ID = get from env variables 
    POTATO_TYPE = "authorization_code" 
    POTATOCALLBACK_URL = "https://potatourl/potatoes/potatocallback" 

    authorization_code = request.GET.get('code') 

    payload = { 
    'potato_type': POTATO_TYPE, 
    'potato_id': POTATO_ID, 
    'potato_secret': POTATO_SECRET, 
    'potato_uri': POTATOCALLBACK_URL, 
    'code': potato_code 
    } 

    r = requests.post(POTATO_OAUTH2_TOKEN_ENDPOINT, data=potatoload) 

    resp = r.json() 

    potatoAccess = { 
    'id': resp['id'], 
    'timestamp': resp['issued_at'], 
    'instanceURL': resp['instance_url'], 
    'signature': resp['signature'], 
    'accessToken': resp['access_token'] 
    } 

    request.session['potatoAccess_id'] = potatoAccess['id'] 
    request.session['potatoAccess_timestamp'] = potatoAccess['timestamp'] 
    request.session['potatoAccess_instanceURL'] = potatoAccess['instanceURL'] 
    request.session['potatoAccess_signature'] = potatoAccess['signature'] 
    request.session['potatoAccess_accessToken'] = potatoAccess['accessToken'] 

    return HttpResponse(t.render({}, request)) 

Par la suite, quand je fais une demande de revérifier mes variables de session, je continue à obtenir des erreurs clés et je suis incapable de les récupérer:

def check_potatoes(request): 
    c = {} 
    c['potatoAccess_id'] = request.session['potatoAccess_id'] 
    print request.session['potatoAccess_id'] 
    return HttpResponse(json.dumps('potatoes'), content_type='application/json') 

OU

def check_potatoes(request): 
    try: 
    c = {} 
    c['potatoAccess_id'] = request.session['potatoAccess_id'] 
    print request.session['potatoAccess_id'] 
    return HttpResponse(json.dumps('potatoes'), content_type='application/json') 
    except Exception as potatoes: 
    potatoesdata = {'message': potatoes.message} 
    return HttpResponse(json.dumps(potatoesdata), content_type='application/json') 

A noter, quand je fais le rappel initial, je peux confirmer que:

request.session['potatoAccess_id'] returns a value 
potatoAccess['id'] returns a value 

lors du changement de vues (autre méthode appelée via ajax) je reçois ces keyErrors comme si les valeurs n'a jamais existé

Répondre

0

erreur débutants - le rappel a été envoyé à l'aide d'un ngrok.io de service à effet tunnel pour ceux vous ne le connaissez pas, (donc je pourrais avoir une connexion sécurisée) et le reste de la session je le faisais simplement sur mon localhost, donc ma configuration est correcte, je n'étais pas dans la même session, d'où mes variables étaient inexistants ...

Mon 'connexion' était en cours à https://localhost:8000/login, cependant, le rappel était fait sur ngrok vers « https://login.potato.com/potatoservices/potatooauth2/potatotoken »

et je continue les tests sur mon localhost, lorsque les variables de session sont disponibles à partir https://xxx.ngrok.io/potatourls