rolemixin current authenticated python flask flask-security

python - current - Cómo ejecutar código personalizado al iniciar sesión con frasco de seguridad



flask sqlalchemy (2)

Soy nuevo en el matraz, pero moderadamente hábil en Python: tengo una aplicación de matraz que usa frasco de seguridad para la autenticación del usuario. Me gustaría agregar alguna funcionalidad adicional al proceso de inicio de sesión del usuario. Específicamente, necesito guardar el auth_token del usuario (que he configurado para ser un token de uso único) para el db cuando inician sesión, y lo elimino cuando cierran la sesión. El problema se debe a que la seguridad de matraz no (según mi conocimiento) expone la maquinaria de inicio de sesión directamente al desarrollador. Por lo que puedo decir del código, importa el inicio de sesión del matraz, que usa una función login_user.

Empecé tratando de anular esta función importando el archivo flask.ext.login (que normalmente no necesitaría hacer) y redefiniendo la función de la siguiente manera:

import flask.ext.login as a def new_login_user(): ...copy of existing function goes here... ...Plus new stuff with current_user.get_auth_token()... a.login_user = new_login_user

sin embargo, recibí todo tipo de problemas con el espacio de nombres, y parece una forma realmente fea de hacerlo.

Estaba pensando que podría haber una manera de hacerlo con un decorador, pero soy nuevo en el matraz, y no he usado decoradores a pesar de todo.

¿Alguna idea sobre cuál podría ser la mejor manera de abordar esto? para el contexto, quiero auth_token en el db, porque necesito pasar la autenticación del sitio web a otro proceso, que también accede a la base de datos. El otro proceso es un servidor API que usa websockets. No quiero combinar los procesos.


Creo que usar un decorador de señal parece ser el más fácil-- en el siguiente ejemplo, on_user_logged_in debe llamar cuando un usuario inicia sesión en su aplicación. Más información en los documentos .

from flask.ext.login import user_logged_in @user_logged_in.connect_via(app) def on_user_logged_in(sender, user): log_auth_token(user.get_auth_token()) # or whatever.


Lo mejor es mantenerlo limpio, escribir su propia función new_login_user y usarla cada vez que use flask.ext.login.login_user . Puede poner su new_login_user en su propio archivo e importarlo desde allí.

Incluso podría llamarlo login_user , y nunca importar flask.ext.login.login_user directamente.