flask_login模块中user_loader装饰器引发的思考

本文探讨了flask_login模块中的user_loader装饰器及其作用。user_loader装饰器用于存储回调函数,该函数在reload_user()方法中被调用,用于根据session中的user_id重新加载用户实例。当HTTP协议导致请求上下文改变时,reload_user()确保能够恢复先前登录的用户状态。logout_user()清除session和cookie后,也会调用reload_user()进行重载,若失败则需重新登录。user_loader和reload_user()对于维护用户会话至关重要。
摘要由CSDN通过智能技术生成

今天看书遇到了flask login模块中的信号机制,看到user_loader这个装饰器时有些疑惑,为什么需要这个装饰器呢,先看一下源码:

    def user_loader(self, callback):
        '''
        This sets the callback for reloading a user from the session. The
        function you set should take a user ID (a ``unicode``) and return a
        user object, or ``None`` if the user does not exist.

        :param callback: The callback for retrieving a user object.
        :type callback: callable
        '''
        self.user_callback = callback
        return callback


看到这不禁疑惑,它的作用只是将被它包装的函数存到self.user_callback这个属性中去,我们先到login_user这个登陆函数中去看看:

    def login_user(user, remember=False, duration=None, force=False, fresh=True):
        if not force and not user.is_active:
            return False

        user_id = getattr(user, current_app.login_manager.id_attribute)()
        session['user_id'] = user_id
        session['_fresh'] = fresh
        session['_id'] = current_app.login_manager._session_identifier_generator()

        if remember:
            session['
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值