[Python] python flask-login: current_user keep anonymous

Discussão em 'Python' iniciado por Stack, Maio 20, 2025.

  1. Stack

    Stack Membro Participativo

    I'm using flask-login and this problem occurs.

    The log-in function run as following:

    @api.route('/login', methods=['POST'])
    def login():
    if current_user.is_authenticated():
    return jsonify(flag='success')
    username = request.form.get('username')
    password = request.form.get('password')
    if username and password:
    user, authenticated = fsUser.authenticate(username, password)
    if user and authenticated:
    if login_user(user, remember='y'):
    print 'is authenticated: ',current_user.is_authenticated()
    return jsonify(flag='success')

    current_app.logger.debug('login(api) failed, username: %s.' % username)
    return jsonify(flag='fail', msg='Sorry, try again.')


    The code is working just fine. It runs normally even toward the return flag='success'. I have checked and see there's session it create. All works well except that the current_user is still anonymous. So the current_user.is_authenticated() still returns fail.

    And I have got no clue where to check, can anyone help me?

    P.S. the user object is gotten from SQL database by SQLAlchemy. If it's maybe the source of problem I can provide the model.py after a bit modification too.

    Edit: My user callback definition:

    @login_manager.user_loader
    def load_user(id):
    user = cache.get(id)
    if not user:
    user = User.get_by_id(id)
    cache.set(id, user, 20*60)
    return user


    I've print out to check, the user return above is corrent, it's just the current_user still anonymous object as default

    The User class:

    class User(db.Model, UserMixin):

    __tablename__ = 'my_users'

    id = Column('user_id', db.Integer, primary_key=True)
    level = Column('user_level', db.Integer, nullable=False)
    name = Column('user_name', db.String(255))
    email = Column('user_email', db.String(255), nullable=False, unique=True)


    # ===============================================================
    # Users

    # ================================================================
    # Password
    _password = Column('user_password', db.String, nullable=False)

    def _get_password(self):
    return self._password

    def _set_password(self, password):
    self._password = generate_password_hash(password)
    # Hide password encryption by exposing password field only.
    password = db.synonym('_password',
    descriptor=property(_get_password,
    _set_password))

    def check_password(self, password):
    if self.password is None:
    return False
    return check_password_hash(self.password, password)

    def is_authenticated(self):
    return True

    def is_active(self):
    return True

    def is_anonymous(self):
    return False

    def get_id(self):
    return unicode(self.id)

    def find_user(self):
    return unicode('hahaha@gmail.com')

    Continue reading...

Compartilhe esta Página