简介:
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官方文档