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.