user_loader example python python-2.7 flask flask-login flask-extensions

python - example - login user_loader



¿Cómo rastrear al usuario actual en frask-login? (3)

Estoy tratando de usar el usuario actual en mi vista desde flask-login. Así que intenté g object

Estoy asignando flask.ext.login.current_user a g objeto

@pot.before_request def load_users(): g.user = current_user.username

Funciona si el usuario es correcto. Pero cuando me inscribo o inicio sesión como con credenciales incorrectas recibo este error

AttributeError: ''AnonymousUserMixin'' object has no attribute ''username''

Por favor, ilumíname donde estoy equivocado ...


AnonymousUserMixin no tiene atributo de nombre de usuario. Necesitas sobrescribir el objeto y llamar a la mezcla. Eche un vistazo a LoginManager.anonymous_user, que es un objeto que se utiliza cuando ningún usuario ha iniciado sesión.

También necesita obtener el usuario de algún lugar. No tiene sentido almacenar el nombre de usuario en g ya que podría usar current_user.username.

Si quisiera obtener el nombre de usuario, también lo necesitaría.

if current_user.is_authenticated(): g.user = current_user.username

Esto requeriría que el objeto de usuario tenga una propiedad llamada nombre de usuario. Hay muchas formas de personalizar el uso de Flask-Logins

Sugiero releer los documentos y echar un vistazo al código fuente:

https://github.com/maxcountryman/flask-login/blob/master/flask_login.py

Joe


Bueno, el mensaje de error lo dice todo. No hay ningún usuario registrado, por lo que current_user devuelve un AnonymousUserMixin . AnonymousUserMixin implementa la interfaz descrita aquí: http://flask-login.readthedocs.org/en/latest/#your-user-class (que no incluye una propiedad de username ). Intenta algo como esto:

@pot.before_request def load_users(): if current_user.is_authenticated(): g.user = current_user.get_id() # return username in get_id() else: g.user = None # or ''some fake value'', whatever

Obviamente, el resto de su código tiene que lidiar con la posibilidad de que g.user no se refiera a un usuario real.


Gracias por su respuesta @Joe y @pjnola, ya que todos sugirieron que remití los documentos de inicio de sesión en el matraz

Descubrí que podemos personalizar la clase de usuario anónimo, así que personalicé para mi requerimiento,

Anonymous class

#!/usr/bin/python #flask-login anonymous user class from flask.ext.login import AnonymousUserMixin class Anonymous(AnonymousUserMixin): def __init__(self): self.username = ''Guest''

Luego agregó esta clase a anonymous_user

login_manager.anonymous_user = Anonymous

A partir de esto, pudo obtener el nombre de usuario si era una solicitud anónima.