Flaskで複数のログインマネージャを設定することはできますか?Flaskで複数のログインマネージャを設定するには?
mydomain.com/page1
mydomain.com/page2
mydomain.com/page3
誰でもログインしてアクセスするページ1 がPAGE2またはPAGE3(またはその逆)へのアクセス権を持ってい必要があります。私は、パスワードで保護する必要が異なるコンテンツを持つ3ページを持っています。
私のjinja2テンプレートにusername
を指定し、その結果に基づいてページの結果を表示することをお勧めします。たとえば、次のように追加することができます。
{% if current_user.is_authenticated and current_user.username == 'abc' %}
<!-- show HTML for user 'abc' only -->
ただし、この方法を使用すると、ページ2とページ3にはアクセスできます。 jinja2テンプレートのユーザーには何も定義されていないため、コンテンツは表示されません。ここで
は、私は現在、LoginManager()
セットアップを持っている方法は次のとおりです。
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
class User():
def __init__(self, username):
self.username = username
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return self.username
@staticmethod
def validate_login(password_hash, password):
return check_password_hash(password_hash, password)
@lm.user_loader
def load_user(id):
user = myUsers.find_one({"User": id})
if not user:
return None
return User(user['User'])
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if current_user.is_authenticated:
return redirect(request.args.get("next") or url_for("dashboard"))
return redirect(url_for("dashboard"))
else:
if request.method == 'POST' and form.validate_on_submit():
user = myUsers.find_one({"User": form.username.data})
if user and User.validate_login(user['Password'], form.password.data):
user_obj = User(user['User'])
login_user(user_obj)
return redirect(request.args.get("next") or url_for("dashboard"))
flash("Wrong username or password. Please try again.", category='error')
return render_template('/login.html', title='Login', form=form)
[Flask-Principle](https://pythonhosted.org/Flask-Principal/)を追加してFlask-Loginを操作します。ドキュメントの[Granular Resource Protection](https://pythonhosted.org/Flask-Principal/#granular-resource-protection)を参照してください。 – pjcunningham
@pjcunninghamありがとうございます。私は見てみましょう。 – mapr