3

Flask-SQLAlchemy を使用するフラスコ Web アプリケーションを構築しています。Flask-Login を使用してセッションを管理し、特定のビューを保護することも検討しています。

Flask-Login には、アプリのさまざまな部分で役立つと思われる特定のメソッドが必要です (具体的には、is_authenticated()is_active()。ただし、すべての例で、これらのメソッドは修正されたものを返すだけでした。たとえば、そのユーザーが実際にテーブルにエントリを持っているかどうかを確認したい場合 (私はログインに LDAP を使用しているので、ユーザーがテーブルにエントリを持っていなくてもログインできるようにしたい)テーブルが存在するかどうかを確認する必要があります)。

しかし、それを定義するクラス内からテーブル自体に対してクエリを実行できるかどうかはわかりません。または、これらの関数を別の場所に配置する必要がありますか (ユーザー クラス内のフラスコ ログインでメソッドが必要な場合でも)。

4

2 に答える 2

0

Flask-Login では、ユーザー ローダー コールバックでユーザー オブジェクトを提供する必要があります。is_authenticated()このユーザーは、データベース エントリによってサポートされる必要はありません。やなどの必要なメソッドを実装している限り、任意のオブジェクトにすることができますis_active()

あなたの説明から、データベースにない有効なユーザーがいるため、必要なユーザーの表現は、データベースのユーザーテーブルに1対1でマップするものではないように思えます。

1 つの方法は、必要なメソッドを両方とも実装する 2 つのユーザー クラスを用意することです。DBUserこれらを と と呼びましょうLDAPUser。2 つのクラスのインスタンス間で一意の ID を持つ戦略を考え出す限り、Flask-Login は気にしません。

このDBUserクラスは、Flask-SQLAlchemy に基づく適切なデータベース モデルであり、is_xxx()メソッドの単純な実装を備えています。一方、LDAPUserクラスは、必要なデータベース クエリを に発行するこれらのメソッドを実装できますDBUser.query

于 2013-12-16T01:34:55.920 に答える