2016-10-12 3 views
-1

ich den Benutzer via Facebook erfolgreich am Authentifizierung und ihren Namen in def fbconnect bekommen()Speichern der Facebook-Login-Session

print "username" ,login_session['username'] 
session.name=login_session['username'] 
print "session.name",session.name 

Aber in meinem html, wenn ich sehe, versuchen Sie überprüfen, ob der Benutzer angemeldet ist oder nicht

Es geht nicht in den Begrüßungsnamen Abschnitt, weil session.name ist Was fehlt mir hier? Vielen Dank.

Das ist mein Python Zeug

@app.route('/fbconnect', methods=['POST']) 
def fbconnect(): 
    if request.args.get('state') != login_session['state']: 
     print "state not equal to login_session" 
     response = make_response(json.dumps('Invalid state parameter.'), 401) 
     response.headers['Content-Type'] = 'application/json' 
     return response 
    access_token = request.data 
    print "access token received %s " % access_token 

    app_id = json.loads(open('fb_client_secrets.json', 'r').read())[ 
     'web']['app_id'] 
    app_secret = json.loads(
     open('fb_client_secrets.json', 'r').read())['web']['app_secret'] 
    url = 'https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=%s&client_secret=%s&fb_exchange_token=%s' % (
     app_id, app_secret, access_token) 
    h = httplib2.Http() 
    result = h.request(url, 'GET')[1] 

    # Use token to get user info from API 
    userinfo_url = "https://graph.facebook.com/v2.4/me" 
    print "userinfo_url", userinfo_url 
    # strip expire tag from access token 
    token = result.split("&")[0] 
    print "token", token 


    url = 'https://graph.facebook.com/v2.4/me?%s&fields=name,id,email' % token 
    h = httplib2.Http() 
    result = h.request(url, 'GET')[1] 
    # print "url sent for API access:%s"% url 
    # print "API JSON result: %s" % result 
    data = json.loads(result) 
    login_session['provider'] = 'facebook' 
    login_session['username'] = data["name"] 
    login_session['email'] = data["email"] 
    login_session['facebook_id'] = data["id"] 

    # The token must be stored in the login_session in order to properly logout, let's strip out the information before the equals sign in our token 
    stored_token = token.split("=")[1] 
    login_session['access_token'] = stored_token 

    # Get user picture 
    url = 'https://graph.facebook.com/v2.4/me/picture?%s&redirect=0&height=200&width=200' % token 
    h = httplib2.Http() 
    result = h.request(url, 'GET')[1] 
    data = json.loads(result) 

    login_session['picture'] = data["data"]["url"] 

    # see if user exists 
    user_id = getUserID(login_session['email']) 
    if not user_id: 
     user_id = createUser(login_session) 
    login_session['user_id'] = user_id 

    output = '' 
    output += '<h1>Welcome, ' 
    output += login_session['username'] 

    output += '!</h1>' 
    output += '<img src="' 
    output += login_session['picture'] 
    output += ' " style = "width: 300px; height: 300px;border-radius: 150px;-webkit-border-radius: 150px;-moz-border-radius: 150px;"> ' 

    flash("Now logged in as %s" % login_session['username']) 

    print "username" ,login_session['username'] 
    session['name']=login_session['username'] 
    print "session['name']",session['name'] 

    return output 

Wenn ich die html zu

{% if login_session['username'] != '' %} 

Dann sagt UNDDEFINEDERROR es zu ändern: 'login_session'

undefiniert ist
+0

Bitte reduzieren Sie dies auf eine ** Minimal ** [MCVE]. Dump nicht einfach Code auf das Ende, redigieren Sie Ihren Beitrag, um eine zusammenhängende Frage zu sein. – davidism

+0

Ich kann Ihr Problem nicht reproduzieren. Einen Wert für die Sitzung zu setzen und ihn später wieder zu laden funktioniert für mich gut. – davidism

+0

Warte, was hat die Vorlage oben mit der Ansicht darunter zu tun? Diese Ansicht rendert keine Vorlage, sie erstellt aus irgendeinem Grund HTML manuell. – davidism

Antwort

0

Es arbeitet nun mit session['username']

Ich musste etwas Code von einer Seite zu einer anderen verschieben Mach es aber zur Arbeit.

Danke für Ihre Hilfe.