同様の質問 here を見つけましたが、答えがうまくいかないようです。
私はFlask User(これはFlaskログインを拡張すると信じています)を使用しており、ほとんどの場合それは非常にうまく機能します。私は独自の完全に新しいテンプレートを作成しました documentation に続いて、これらのテンプレートをtemplates/flask_user/login.html
、templates/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)
UserManager
は__init__.py
ではなくmodels.py
で初期化する必要があります。 UserManager
はLoginManager
の初期化を処理します。
__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
を見て、本番環境および開発構成をより簡単に処理する方が簡単です。