😽

Flaskでの簡単な認証

2021/06/23に公開

簡単なものならflask_httpauthが使いやすい。
https://flask-httpauth.readthedocs.io/en/latest/

@{auth}.login_required()とつけると認証がかかる。

トークン認証の場合はverify_token()という関数を定義する必要がある。
ロールを設定した場合はさらにget_user_roles()という関数を定義する必要がある。

from flask import Flask
from flask_httpauth import HTTPTokenAuth

app = Flask(__name__)
auth = HTTPTokenAuth(scheme='Bearer')

@app.route('/users', methods=['GET'])
@auth.login_required(role=['admin'])
def get_users():
    ''' verify_token()がFalse以外の場合は先へ進む
    get_user_roles()の戻り値listに'admin'が含まれていれば先へ進む
    それ以外は401 Unauthorizedが返る
    '''
    users = ...
    return dumps(users)

@auth.verify_token
def verify_token(token):
    ''' トークンが正しければFalse以外の値, それ以外はFalseを返す関数を実装する '''
    tokens = [...]
    if token in tokens:
        return True
    return False
    
@auth.get_user_roles
def get_user_roles(user_id):
    ''' user_idからrolesを返す関数を実装する
    以下は実装の例
    '''
    user = db.users.find_one({'id':user_id})
    return user['roles'] 
    # rolesは['admin','customer']のような、rolesの値を含んだlist

Discussion