小さなWebアプリケーションを開発しています。Google のソーシャル認証にhttps://pythonhosted.org/Flask-OAuthライブラリを使用しています。また、Flask-Login
. 認証コールバックを正常にセットアップし、ユーザーを認証しました。を使用して、ユーザーも正常にログインできますlogin_user(user, remember=True)
。
remember_token
これにより、有効期限が 365 日のという名前の Cookie が作成されます。ただし、ブラウザ (Firefox、Chrome) を閉じて、アプリケーションを再度開くと、問題が発生します。
Firefox で使用Tools->Privacy->Remove Individual Cookies
すると、remember_token Cookie が表示されます。ただし、インデックスページに移動すると、/
この機能が設定されています..
@main.route('/', methods=['GET', 'POST'])
def index():
if current_user.is_authenticated:
print_debug('User is authenticated in /')
return redirect(url_for('.home'))
else:
return render_template('index.html')
@main.route('/home', methods=['GET', 'POST'])
@login_required
def home():
do_something()
に移動する/
と、デバッグ情報が出力され、正常にリダイレクトされ/home
ます。ただし、このリダイレクトは によって傍受され、再度ログインするよう@login_required
にリダイレクトされます。/google-login?next=%2Fhome
また、remember_token
もこの段階で削除されます。Firefoxで確認したら確認しました。
記憶機能が正常に動作しない理由がわかりません。またはなぜremember_token
削除されているのか。その間は何もしません。段階的に、
- 私は最初にログインします。ブラウザを閉じない限り、すべて正常に動作します。すべて
@login_required
の仕事です。 - ブラウザーを閉じて再度開くと、webapp を開かなくなるまで
localhost:5000
、cookie names が残りますremember_token
。 - 開くとすぐに、最初の
current_user.is_authenticated
on/
が True を返し、この時点から、すべての @login_required が再ログインを要求します。
データベースにFlask-sqlalchemyとMySQLを使用しています。私のユーザーモデルは
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
password_hash = db.Column(db.String(128))
username = db.Column(db.String(128), unique=True, index=True)
マイ ユーザー ローダー
@login_manager.user_loader
def load_user(user_id):
print_debug("User loader called with id %s" % user_id)
return User.query.get(int(user_id))
どんな助けでも本当に感謝しています。
ありがとう!