2010-01-27 9 views
1

J'ai passé des jours à chercher sur le Web et à dessiner un blanc --im nouveau pour python aussi! Je veux simplement intégrer RPX (janrain) dans Appengine - des tas de code pour les insertions de script et le retour du jeton openid - c'est génial - mais à part ça, personne ne semble aller plus loin que dans la création d'un openid connexion qui fonctionne - pourquoi? je suppose pas de gestion de session?RPX, OpenID - Comment écrire un gestionnaire de connexion approprié pour AppEngine

Voici un gestionnaire de classe simple qui obtient le TOKEN pour l'ID ouvert, puis effectue une extraction pour récupérer le profil des utilisateurs. Tout est très simple en utilisant RPX.

gestionnaire simple pour obtenir la réponse de RPX

class RPXHandler(webapp.RequestHandler): 
    def get(self): 
    token = self.request.get('token') 
    url = 'https://rpxnow.com/api/v2/auth_info' 
    args = { 
     'format': 'json', 
     'apiKey': '#YOUR KEY#', 
     'token': token 
     } 
    r = urlfetch.fetch(url=url, 
         payload=urllib.urlencode(args), 
         method=urlfetch.POST, 
         headers={'Content-Type':'application/x-www-form-urlencoded'} 
         ) 
json = simplejson.loads(r.content) 

logging.info(json) 

if json['stat'] == 'ok':  
    unique_identifier = json['profile']['identifier'] 
    nickname = json['profile']['preferredUsername'] 
    email = json['profile']['email'] 


    # log the user in using the unique_identifier 
    # this should your cookies or session you already have implemented 


    self.redirect('static/loggedin.html') 
    else: 
    self.redirect('static/error.html') 

Maintenant # ici est où le problème commence - idéalement, nous pourrions être paresseux et juste les enregistrer dans les comptes Google - mais leur est pas de méthode pour connecter un utilisateur dans ie;

user.login (email)

afin que abandonne tout espoir d'utiliser les comptes de Google - et à la juste si nous avons ouvert id - pourquoi la peine!

SO ...

Ce que je besoin est mon propre utilisateur datastore - des thats simple - et des moyens permettant d'identifier si l'utilisateur est connecté - sessions? Mais dans AppEngine, il n'y a pas de support pour les sessions.

J'ai trouvé quelques libarys de classe qui disent qu'ils traitent avec cela, mais tout semble mal documenté et sans de bons exemples de code

Quelqu'un peut-il aider?

+1

VOUS NE DEVRIEZ PAS UTILISER TOUS LES CAPSULES - MEME POUR UN TITRE - IL A L'AIR QUE VOUS JARREZ. –

Répondre

1

GAE vous donne accès à une base de données, non? Générez un jeton sécurisé et stockez-le avec l'URL de l'utilisateur renvoyée par RPX dans la base de données. Définissez le jeton sécurisé en tant que cookie pour que vous l'obteniez à chaque requête - regardez le jeton dans la base de données, puis faites le reste à partir de là.

Bien que je m'inquiète au sujet des performances, cela fonctionne plutôt bien pour moi.