私は自分のためにスーパーシンプルなWebアプリケーションを構築しようとしています。私は唯一のユーザーになるので、ユーザー管理のためにデータベースを組み込む必要はないと思う。フラスコログインを使用しようとしていますが、login_user
への私の呼び出しが成功したにもかかわらず、@login_required
のページへのリダイレクト後も401-Unauthorizedページが表示されます。静的なユーザーとのFlask-loginはいつも寄与する401-無許可
from flask import Flask, render_template, request, flash, redirect, url_for
from flask.ext.login import LoginManager, login_user, logout_user, current_user, login_required, UserMixin
app = Flask(__name__, static_url_path="")
app.secret_key = "[redacted]"
login_manager = LoginManager()
login_manager.init_app(app)
#login_manager.login_view = "login"
class User(UserMixin):
def __init__(self, id):
self.id = id
nathan = User('nathan')
@login_manager.user_loader
def load_user(userid):
if userid == 'nathan':
return nathan
else:
return None
@app.route("/logout")
@login_required
def logout():
logout_user()
return redirect(url_for('login'))
@app.route('/')
@login_required
def index():
return render_template('index.html')
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == 'POST':
if request.form['username'] == 'nathan'\
and request.form['password'] == '[redacted]':
login_user(nathan, remember=True)
flash('logged in...', 'success')
return redirect(request.args.get("next") or url_for("index"))
else:
flash('Incorrect username or password. Try again.', 'error')
return render_template("login.html");
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
私は(login_user
戻り真)ログインが実際に成功したことを確認したとそのload_user
がnathan
オブジェクトを返している:ここでは私のアプリの全体です。
[編集]また、私は現在、Flask開発サーバーを使用しています(該当する場合)。
どこが間違っているのかわかりません。前もって感謝します!
データベースなしでフラスコログインを使用できるかわかりません。セッションを保存するには何らかの方法が必要です。 – computmaxer
セッション情報はすべてデータベースではなくクッキーに保存されていると思っていました。 – gnathan
私はもう少しクッキーを読むことをお勧めします。要するに、クッキーとは、ブラウザがドメインごとに格納するもので、そのドメインへのすべての要求とともに送信されます。セッションクッキーは単にセッションIDで構成され、セッションIDはアプリケーションが要求を受信したときに参照する役割を担います。アプリケーションは、セッションIDに対応するセッションに関するいくつかの情報(期限切れ時間など)をまだ保存する必要があります。 Flask-loginはこれをすべて処理しますが、それらのセッションを保存するには何らかの方法が必要です。 – computmaxer