flask扩展包---Login-Flask

简介:

Flask-Login 为 Flask 提供了用户会话管理,它处理了日常的登入、登出并且长时间记住用户的会话。

  • 会话中存储活跃的ID,让用户自由的登入、登出
  • 限制用户访问视图
  • 处理记住密码功能
  • 保护用户会话免遭cookie被盗的牵连
  • 可以更好的与Flask-Principal或其他的扩展包集成

应用配置:

提供一个user_loader回调函数,用于从会话中存储用户ID重新加载用户对象,函数接收一个用户的唯一ID作为参数返回相应的用户对象

@login_manager.user_loader
def load_user(user_id):
    # 用户表模型 User
    from albumy.models import User
    user = User.query.get(int(user_id))
    return user

如果ID无效返回 None 出抛出异常,此时ID会从会话中移除处理继续

对应的需求的常用属性:
is_authenticted
当前用户验证通过时返回 True, (只有通过验证的用户才会满足login_required 的条件)

is_acitve
用户通过验证,账户已激活,未被停用返回 True

is_anonyous
如果是一个匿名用户,返回 True ,真实用户返回False

get_id()
返回一个用户的唯一识别码 ID必须是unicode类型

login_view
当用户需要登录时要重定向到的视图的名称。(如果您的身份验证机制位于应用程序外部,那么这也可以是一个绝对URL。

login_manager.login_view = 'auth.login'

login_message
当用户被重定向到登录页面时,要闪过的消息。

# 自定义消息内容
login_manager.login_message = '你还没有登录,请去登录!'
# 自定义消息分类
login_manager.login_message_category = 'warning'

当登录的客户修改了配置譬如修改密码,需要重新认证
认证页面

login_manager.refresh_view = "auth.re_authenticate"

needs_refresh_message
重新认证消息提醒

# 自定义消息内容
login_manager.needs_refresh_message = "为了保护您的帐户,请重新认证以访问此页面。"
# 自定义消息分类
login_manager.needs_refresh_message_category = "info"

匿名用户

默认情况下,当一个用户没有真正地登录,current_user 被设置成一个 AnonymousUserMixin 对象。它由如下的属性和方法:

  • is_active 和 is_authenticated 的值为False
  • is_anonymous 的值为 True
  • get_id() 返回 None
# 根据自己应用自定义匿名用户的权限
class Guest(AnonymousUserMixin):
    def can(self, permission_name):
        return False
    @property
    def is_admin(self):
        return False

login_manager.anonymous_user = Guest

知识拓展:

from flask_login import current_user

引入 current_user 代理来访问登录用户,在每一个模板中都可以使用
例如:

# app/__init__.py
def register_template_context(app):
    @app.context_processor
    def make_template_context():
        if current_user.is_authenticated:
            notification_count = Notification.query.with_parent(current_user).filter_by(is_read=False).count()
        else:
            notification_count = None
        return dict(notification_count=notification_count)

# main/index.html
{% if current_user.is_authenticated() %}
  Hi {{ current_user.name }}!
{% endif %}

详细内容请参考 Flask-Login官方文档

你可能感兴趣的:(flask扩展包---Login-Flask)