2011-02-12 3 views
0

J'ai une application web.py que je cours localement via mod_wsgi (http: // localhost/...). Je suis arrivé au point d'ajouter l'authentification à mon application et je voulais utiliser le module intégré de web.py. J'ai commencé par un bref exemple trouvé ici: http://log.liminastudio.com/programming/howto-use-openid-with-web-pyUtilisation de web.webopenid avec web.py pour authentifier les utilisateurs

import web, web.webopenid 

urls = (
    r'/openid', 'web.webopenid.host', 
    r'/', 'Index' 
) 

app = web.application(urls, globals()) 

class Index: 
    def GET(self): 
     body = ''' 
     <html><head><title>Web.py OpenID Test</title></head> 
     <body> 
      %s 
     </body> 
     </html> 
     ''' % (web.webopenid.form('/openid')) 

     return body 

if __name__ == "__main__": app.run() 

Cela fonctionne assez bien courir dans le terminal et va http://localhost:8080/. Un autre exemple http://c-farrell.blogspot.com/2010/11/usrbinenv-pythonimport-webfrom-web.html fait une technique similaire, mais a plus de sens pour moi.

#!/usr/bin/env python 
import web 
from web import webopenid 
urls = (
'/', 'index', 
'/openid', 'webopenid.host', 
) 

... more code ... 

class index: 
    def GET(self): 
    oid = webopenid.status() 
    if not oid: 
     return 'please log in: ' + \ 
     webopenid.form('/openid') 
    else: 
     return 'you are logged in as:' + \ 
       webopenid.form('/openid') 

Voici où je me perds un peu. De ce que je peux dire, l'argument passé à form est l'URL de retour après la connexion. Par exemple, si je mets 'http://www.yahoo.com/', il m'y amènera après chaque tentative de connexion. Je pense que cela devrait pointer vers mon propre contrôleur et juste vérifier là, mais la convention semble être d'utiliser le contrôleur web.webopenid.host, qui je suppose gère l'ID et retourne à l'URL de base '/'. Je pense que j'y arrive, mais le statut retourné est toujours None. D'après ce que je comprends, c'est un problème de code, ou il y a quelque chose dans ma configuration apache qui empêche l'authentification de fonctionner. Dans web.webopenid, la bibliothèque crée un fichier .openid_secret_key dans le même répertoire que le serveur Web. Quand je lance l'exemple de code, ceci est créé. Quand j'exécute mon code via apache, ce n'est pas le cas (du moins pas dans le cgi-bin.) Sinon, si ce fichier n'est pas généré ou régénéré à chaque fois, il m'empêchera de me connecter. Je crois que c'est un problème d'apache car j'ai essayé d'exécuter mon application via le serveur Web web.py et j'ai obtenu le fichier créé et je peux m'authentifier. Tout ce que je peux conclure est que ce fichier n'est pas en cours d'écriture et chaque requête suivante essaie un nouveau fichier et je ne peux jamais m'authentifier. Est-ce que les gourous apache/mod_wsgi peuvent m'expliquer où ce fichier est écrit ou si c'est le problème?

Répondre

0

La plupart des causes évidentes ont été données en réponse à la même question sur la liste mod_wsgi. Voir:

https://groups.google.com/d/msg/modwsgi/iL65jNeY5jA/KgEq33E8548J

Il est probablement une combinaison des deux premiers, répertoire de travail actuel et les droits d'accès des utilisateurs d'Apache.

+0

J'ai modifié la bibliothèque pour écrire directement dans/tmp, mais je n'ai toujours pas réussi. Je ne suis pas convaincu que c'est un problème de fichier pour le moment. – voodoogiant

Questions connexes