フラスコセキュリティを使用してユーザーを認証しています。私は認証がhttp_auth_required
デコレータで正しく動作することを確認しました - ユーザーはユーザーストア(私の場合はSQLAlchemyUserDatastore
)に対して検証されており、すべて正常です。Flask-Securityのカスタム認証方法
Flask-Securityが私に与えるもの(current_user
など)を利用しながら、独自の認証方法(私はカスタムLDAP検証システムを使用します)を使用したいと考えています。私はそれは私が自分で行うことができないいくつかのものをやっている_check_http_auth
と呼ばれるプライベート関数を使用していることがわかりhttp_auth_required
デコレータを見ると、しかし
def authenticate_with_ldap(func):
@wraps(func)
def wrapper(*args, **kwargs):
if not request.authorization:
return unauthorized_user_handler()
user = user_datastore.get_user(request.authorization.username)
if not user or not authenticate_with_ldap(user.email, user.password):
return unauthorized_user_handler()
return func(*args, **kwargs)
return wrapper
:私はこのようになりますカスタムデコレータを書きましたリクエスト・コンテキスト・スタックの先頭にユーザを設定し、シグナルを送信するなど、プライベート・メンバにアクセスする必要はありません。コードは次のようになります。
def _check_http_auth():
auth = request.authorization or BasicAuth(username=None, password=None)
user = _security.datastore.find_user(email=auth.username)
if user and utils.verify_and_update_password(auth.password, user):
_security.datastore.commit()
app = current_app._get_current_object()
_request_ctx_stack.top.user = user
identity_changed.send(app, identity=Identity(user.id))
return True
return False
だから私の質問です:まだ最大限にフラスコ・セキュリティを利用しながら、カスタム認証方法を持ってする正しい方法は、何ですか?