Flask-login

Flask-login提供用户session管理,它解决了用户登录,登出,在长时间内能记住你的用户的session。

用处:
- 储存已激活的用户ID到session中,方便用户登录和登出
- 对已登录用户或登出用户限制视图
- 提供“remember me”功能
- 帮助你防止你的session被cookie小偷盗掉
- 将认证扩展和Flask整合到一起

然而,它无法做到:

  • 不提供数据库或其他储存方法给你,你必须自己负责如何加载数据
  • 限制你使用用户名和密码,开放ID和其他认证方法
  • 处理登录用户和匿名用户的权限
  • 解决用户注册和找回

安装

pip install flask-login

配置

首先,使用flask-login的应用程序中最重要的部分就是要有Loginmanager类,你必须在你的应用程序中创建该类的实例

login_manager = LoginManager()

如果你已经创建了一个应用程序实例app,接下来,就是把它装进login_manager里,这样login manager才能够让你的应用app和Flask-login一起工作,比如,当用户需要登录的时候,login manager就会根据id来加载用户。

login_manager.init_app(app)

如何工作?

你需要提供一个user_loader回调函数,这个回调函数是用来从存储在session中的ID里加载用户对象,根据用户的unicode ID,返回用户对象

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

当然,如果ID无效的话,就返回None(不报异常)

User类

你的User类还得要实现下面4种方法

  1. is_authenticated()–如果用户已认证,则返回True。(只有认证用户才能使用login_required装饰器)
  2. is_active()–如果用户已激活,则返回True.除了认证,用户还需要激活他们的账户,确保他们不是僵尸。未激活账户将无法登陆(当然,这不是强制性的)
  3. is_anonymous()–如果用户是匿名游客,则返回True.(真实用户应该返回False)
  4. get_id()–这个方法会返回一个唯一的Unicode ID,被用来从回调函数load_user()中加载用户,记住这里必须是一个Unicode,如果ID是int或其他类型的话,需要将其转化为Unicode

为了更快捷地实现上面4种方法,我们可以让User类继承UserMixin

from flask_login import UserMixin

class User(UserMixin):

登录举例

如果有一位用户已经认证过了,你现在就可以使用login_user()来登录他

@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User(xxx)
        login_user(user)  #表登陆
        flash('login successfully')

        next = request.args.get('next')
        if not is_safe_url(next):
            return abort(400)
        return redirect(next or url_for('index'))
    return render_template('index.html', form = form)

注意:你必须要检验next的值,不这样做的话,你的应用程序将会很容易受到攻击

现在你可以在每个模板中使用current_user来表示已登录用户

{% if current_user.is_authenticated %}
    Hi {{current_user.username}}
{% endif %}

为了保证路由只被已认证的用户访问,flask-login提供了login_required装饰器

@app.route('/setting')
@login_required
def setting():
    pass

当用户选择登出时,

@app.route('logout')
@login_required
def logout():
    logout_user() # 表退出
    return redirect(somewhere)

定制登陆

默认情况下,当一个未登录用户试图访问一个login_required页面时,Flask-login会将页面跳转到登录界面,并且会发消息让你先登录。(如果你还没有设置你的登陆页面的话,就会abort一个401 error)

现在我们来设置登陆页面

login_manager.login_view = '蓝本名.login'

默认的消息是’Please log in to access this page’.当然,你也可以对消息进行定制

login_manager.login_message = u"xxxxxxxxxx"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值