跳转到主要内容

为Flask提供用户身份验证和会话管理。

项目描述

Flask-Login

Tests coverage Software License

Flask-Login为Flask提供用户会话管理。它处理登录、登出以及记住用户长时间会话的常见任务。

Flask-Login 不绑定到任何特定的数据库系统或权限模型。唯一的要求是您的用户对象实现一些方法,并提供一个回调函数,以便从用户ID加载用户。

安装

使用pip安装扩展

$ pip install flask-login

用法

安装完成后,Flask-Login的使用很简单。让我们一步步设置一个基本的应用程序。请注意,这是一个非常基本的指南:我们在这里会采取一些捷径,这些捷径在真实的应用程序中不应使用。

首先,我们将设置一个Flask应用程序

import flask

app = flask.Flask(__name__)
app.secret_key = 'super secret string'  # Change this!

Flask-Login通过登录管理器工作。为了开始,我们将通过实例化它并告诉它关于我们的Flask应用程序来设置登录管理器

import flask_login

login_manager = flask_login.LoginManager()

login_manager.init_app(app)

为了简单起见,我们将使用字典来表示用户数据库。在实际应用程序中,这将是一个实际的持久层。然而,重要的是指出这是Flask-Login的一个特性:它不关心你的数据是如何存储的,只要你告诉它如何检索它!

# Our mock database.
users = {'foo@bar.tld': {'password': 'secret'}}

我们还需要告诉Flask-Login如何从Flask请求和会话中加载用户。为此,我们需要定义我们的用户对象,一个user_loader回调,以及一个request_loader回调。

class User(flask_login.UserMixin):
    pass


@login_manager.user_loader
def user_loader(email):
    if email not in users:
        return

    user = User()
    user.id = email
    return user


@login_manager.request_loader
def request_loader(request):
    email = request.form.get('email')
    if email not in users:
        return

    user = User()
    user.id = email
    return user

现在我们可以定义我们的视图了。我们可以从一个登录视图开始,它将填充会话中的认证信息。之后,我们可以定义一个需要认证的视图。

@app.route('/login', methods=['GET', 'POST'])
def login():
    if flask.request.method == 'GET':
        return '''
               <form action='login' method='POST'>
                <input type='text' name='email' id='email' placeholder='email'/>
                <input type='password' name='password' id='password' placeholder='password'/>
                <input type='submit' name='submit'/>
               </form>
               '''

    email = flask.request.form['email']
    if email in users and flask.request.form['password'] == users[email]['password']:
        user = User()
        user.id = email
        flask_login.login_user(user)
        return flask.redirect(flask.url_for('protected'))

    return 'Bad login'


@app.route('/protected')
@flask_login.login_required
def protected():
    return 'Logged in as: ' + flask_login.current_user.id

最后,我们可以定义一个用于清除会话和注销用户的视图

@app.route('/logout')
def logout():
    flask_login.logout_user()
    return 'Logged out'

现在我们有一个基本的工作应用程序,使用了基于会话的认证。为了结束,我们应该提供登录失败的回调函数

@login_manager.unauthorized_handler
def unauthorized_handler():
    return 'Unauthorized', 401

有关Flask-Login的文档可在ReadTheDocs上找到。有关配置的完整理解,请参阅源代码

贡献

我们欢迎贡献!如果您想对Flask-Login进行黑客攻击,请按照以下步骤操作

  1. 分叉此存储库
  2. 进行您的更改
  3. 使用pip install -r requirements/dev.txt安装dev要求
  4. 在运行tox后提交拉取请求(确保没有错误!)

请给我们足够的时间来审查您的提交。谢谢!

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

Flask-Login-0.6.3.tar.gz (48.8 kB 查看哈希)

上传时间

构建分发

Flask_Login-0.6.3-py3-none-any.whl (17.3 kB 查看哈希)

上传时间 Python 3

由以下支持