GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

maxcountryman

flask-login – Flaskユーザーセッション管理

投稿日:

Flaskユーザーセッション管理。 https://flask-login.readthedocs.io/

フラスコ – ログイン

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

    # DO NOT ever store passwords in plaintext and always compare password
    # hashes using constant-time comparison!
    user.is_authenticated = request.form['password'] == users[email]['password']

    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 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'

ReadTheDocsには、Flask-Loginの完全なドキュメントがあります。

貢献する

寄付を歓迎します! Flask-Loginをハックしたい場合は、以下の手順に従ってください:

  1. このリポジトリをフォークします
  2. 変更を加える
  3. dev-requirements.txt要件をインストールしdev-requirements.txt
  4. make checkを実行した後にプルリクエストを送信します(エラーではないことmake check )。

あなたの投稿を見直すのに十分な時間を与えてください。 ありがとう!







-maxcountryman
-

執筆者: