web-dev-qa-db-ja.com

Flask-User / Flask-Loginのデフォルトテンプレートのオーバーライド

同様の質問 here を見つけましたが、答えがうまくいかないようです。

私はFlask User(これはFlaskログインを拡張すると信じています)を使用しており、ほとんどの場合それは非常にうまく機能します。私は独自の完全に新しいテンプレートを作成しました documentation に続いて、これらのテンプレートをtemplates/flask_user/login.htmltemplates/flask_user/register.htmlなどに配置しました。

また、設定ファイルにUSER_UNAUTHENTICATED_ENDPOINT = "login"USER_UNAUTHORIZED_ENDPOINT = "login"を設定しました。ここで、loginはログインルートの名前です。

問題は、サインアウトしていて、ユーザーにログインを要求するページに直接アクセスしようとすると、http://localhost:5000/user/sign-inに送信され、Flask-Loginサインインページが表示されることです。これには2つの誤りがあります。1)これはサインインの正しいルートではなく、2)これはサインインの正しいテンプレートではありません。

誰かがこれについて提案できるどんな助けにも感謝します。

編集:

アプリとLoginManagerを初期化する__init__.pyのコード:

app = Flask(__name__)

@app.context_processor
def inject_production_status():
    return dict(production=True)

# Initialise flask_login
login = LoginManager(app)
login.login_view = 'login'
login.refresh_view = "login"
login.needs_refresh_message = "Please sign in again to access this page"

UserManagerはmodels.pyの下部で定義されています。

user_manager = UserManager(app, db, User)
6
Rob

UserManager__init__.pyではなくmodels.pyで初期化する必要があります。 UserManagerLoginManagerの初期化を処理します。

__init__.pyで置き換える必要があります:

# Initialize flask_login
login = UserManager (app, db, User)
login.login_view = 'login'
login.refresh_view = "login"
login.needs_refresh_message = "Please sign in again to access this page"

沿って

# Initialize flask_user
from .models.user_models import User
user_manager = UserManager (app, db, User)
...
# login is now accessible by user_manager.login_manager

(そしてmodels.pyから削除してください)

次に例を示します。 https://github.com/lingthio/Flask-User-starter-app/blob/master/app/init。py

質問とは無関係ですが念のため:長期的には、app.config.from_objectを見て、本番環境および開発構成をより簡単に処理する方が簡単です。

0
JBLaf