Yo uso cherrypy para esto, y lo que hago es logear al usuario con user/pass y guardar un cookie con un uuid unico y listo, cada cierto tiempo lo "expiro" de lado servidor y cambio el valor del cookie.
import hmac
from hashlib import sha1
from uuid import uuid4
token =
hmac.new(uuid4().bytes, digestmod=sha1).hexdigest()
# Guarda en la DB
set_auth_cookies(token)
def set_auth_cookies(token):
cherrypy.response.cookie['COOKIE_NAME'] = token
cherrypy.response.cookie['COOKIE_NAME']['path'] = '/'
cherrypy.response.cookie['COOKIE_NAME']['version'] = 1
cherrypy.response.cookie['COOKIE_NAME']['max-age'] = 3600
cherrypy.response.cookie['COOKIE_NAME']['httponly'] = True
luego de eso las siguientes llamadas las leo asi:
def login_required():
if not 'COOKIE_NAME' in cherrypy.request.cookie:
raise cherrypy.HTTPError(401)
token = cherrypy.request.cookie['COOKIE_NAME'].value
# Buscar usuario en DB
if not user or user['expires'] < datetime.now():
raise cherrypy.HTTPError(401)
cherrypy.request.user = user
set_auth_cookies(token)