Je suis un programmeur php qui commence juste avec Python. J'essaye de faire en sorte que Python gère la connexion/déconnexion via des sessions stockées dans une base de données. Les choses fonctionnent, mais semblent incompatibles. Par exemple, un utilisateur n'est parfois pas déconnecté. Parfois, les utilisateurs "commutent" les connexions. Je suppose que cela a quelque chose à voir avec la sécurité des threads, mais je ne sais pas par où commencer pour résoudre ce problème. Toute aide serait appréciée. Voici ce que j'ai maintenant:Un bon moyen de faire la gestion de session en Python + Pylons pour un programmeur php
#lib/base.py
def authenticate():
#Confirm login
try:
if user['authenticated'] != True:
redirect_to(controller='login', action='index')
except KeyError:
redirect_to(controller='login', action='index')
#Global variables
user = {}
connection = {}
class BaseController(WSGIController):
#Read if there is a cookie set
try:
session = request.cookies['session']
#Create a session object from the session id
session_logged_in = Session(session)
#If the session is valid, retrieve the user info
if session_logged_in.isValid(remote_addr):
#Set global variables about the logged in user
user_logged_in = User(session_logged_in.user_id)
user['name'] = c.name = user_logged_in.name
user['name_url'] = c.name_url = user_logged_in.name_url
user['first_name'] = c.first_name = user_logged_in.first_name
user['last_name'] = c.last_name = user_logged_in.last_name
user['email'] = c.email = user_logged_in.email
user['about'] = c.about = user_logged_in.about
user['authenticated'] = c.authenticated = True
user['profile_url'] = c.profile_url = user_logged_in.profile_url
user['user_thumb'] = c.user_thumb = user_logged_in.user_thumb
user['image_id'] = c.image_id = user_logged_in.image_id
user['id'] = c.user_id = user_logged_in.id
#Update the session
session_logged_in.current_uri = requested_url
session_logged_in.update()
#If no session has been set, do nothing
except KeyError:
user['authenticated'] = False
Je peux alors accéder à l'utilisateur {} global de mes contrôleurs:
#controllers/profile.py
from project.lib.base import BaseController, user
class ProfileController(BaseController):
def index(self, id=None, name_url=None):
#If this is you
if user['id'] == 1
print 'this is you'
Y at-il une meilleure façon de le faire? Merci de votre aide.
Je n'ai pas encore travaillé avec les sessions Pylons, donc je ne suis d'aucune aide. Mais puisque vous commencez avec Python, je pourrais suggérer de refactoriser votre fonction d'authentification comme ceci: sinon user.get ('authentication', False): redirect (blah blah), de cette façon, vous n'avez pas besoin d'attraper KeyError des exceptions. –
Merci. Je vais mettre en œuvre cela maintenant. – ensnare