Cómo ejecutar código personalizado al iniciar sesión con flask-security

Soy nuevo en el matraz, pero soy moderadamente competente en python: tengo una aplicación de matraz que utiliza la seguridad del matraz 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 como un token de uso único) en la base de datos cuando inician sesión, y eliminarla cuando finalice la sesión. El problema viene porque flask-security no (a mi entender) expone la maquinaria de inicio de sesión directamente al desarrollador. Por lo que puedo decir del código, importa flask-login, que utiliza una función login_user.

Comencé intentando anular esta función importando flask.ext.login (que normalmente no tendría que 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, me golpearon con 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 mucho a pesar de eso.

¿Alguna idea sobre cuál sería la mejor manera de abordar esto? para el contexto, quiero el auth_token en la base de datos, 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ñales parece ser lo más fácil: en el siguiente ejemplo, debe llamarse on_user_logged_in cuando un usuario on_user_logged_in sesión en su aplicación. Más información en la documentación .

 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 cuando, de lo contrario, usaría flask.ext.login.login_user . Podría poner su new_login_user en su propio archivo e importarlo desde allí.

Incluso puede llamarlo login_user y nunca importar flask.ext.login.login_user directamente.