Flask-Login

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

用户登陆程序后,他们认证状态被记录下来,这样浏览不同页面时才能记住这个状态。Flask-Login是个非常有用的小型扩展,专门用来管理用户认证系统中的认证状态,且不依赖特定的认证机制;

配置应用

login_manger = LoginManger()

login_manger.init_app(app)`

提供一个user_loader回调,这个回调用于会话中存储用户ID重载用户对象。它接受一个用户的unicode ID作为参数,并返回用户对象:

@login_manager.user_loader
def load_user(userid):
    return User.query.get(userid)

同时用户类(models)必须实现以下的方法和属性,简单使用,可以从UserMixin继承这些属性和方法:

is_authenticated: 当用户通过验证时,也即提供有效证明时返回 True 。(只有通过验证的用户会满足 login_required 的条件。)

is_active: 如果这是一个活动用户且通过验证,账户也已激活,未被停用,也不符合任何你 的应用拒绝一个账号的条件,返回 True 。不活动的账号可能不会登入(当然, 是在没被强制的情况下)。

is_anonymous: 如果是一个匿名用户,返回 True 。(真实用户应返回 False 。)

get_id(): 返回一个能唯一识别用户的,并能用于从 user_loader 回调中加载用户的 unicode 。注意着 必须 是一个 unicode —— 如果 ID 原本是 一个 int 或其它类型,你需要把它转换为 unicode 。

登入示例

一旦用户通过验证,你可以使用login_user函数让用户登入

@app.route('/login', methods=['GET, 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_sumbit():
        # ...密码校验
        # 用户登入
        login_user(user, remember=form.remember_me.data)
        flask.flash('Logged in successfully.')
        next = flask.request.args.get('next')
        if not next_is_valid(next):
            return flask.abort(400)
        return flask.redirect(next or flask.url_for('index'))
    return flask.render_template('login.html', form=form)

登出示例

@auth.route('/logout')
@login_required          # 用户登入装饰器
def logout():
    logout_user()  # 删除用户会话
    flash('You have been logged out.')
    return redirect(url_for('main.index'))

current_user可以在全局使用,调用已登入的用户对象,可以使用用户类(models)中的属性和方法:

# template中使用
{% if current_user.is_authenticated %}
  Hi {{ current_user.name }}!
{% endif %}


# views视图中使用
current_user.name = form.name.data
...

你可能感兴趣的:(Flask-Login)