フラスコサーバーにflask_loginを書きました。ユーザーにログインするには、私はlogin_user(user)
を使用し、私は@login_required
で保護された私のサイトの1ページを持っています。クライアントとして、私はPythonがパッケージを要求し使用し、それがコードです:PythonリクエストのFlaskサーバー上のセッションは動作しません
import requests
sess = requests.session()
sess.post("http://page.on/my/site", data={"login" : "login", "password" : "password"})
すべては、この認証でOKですが、その後、私は保護されたページにアクセスしよう:
r = sess.get("http://secure.page/on/the/site")
そして、この要求は、Unauthorized
を受け取ります。認証(今のところ、私はローカルホスト上の私のサーバーを持っている)後に設定 それのクッキー:この認証の問題を解決する方法
login_manager.session_protection = "strong"
:ところで
<RequestsCookieJar[<Cookie session=.eJwdzjkSwjAMAMC_uE4h2dbhfCZjHR5oE1Ix_B2Gbst9l2OdeT3K_jrv3MrxjLKX5tqBGbq7MfmPiYi8aA7RAG8haZJoDZ0HrlSG6Oa1-yCqsaJNJlSVAQToNXsAt8UiFQBIbIa3bmYiarYyiEaNsUJjmlLZyn3l-c_Uzxf_2C6a.Cnf0yA.xIUSIFgcvjqwszrbwCA_D2Rqa5k for localhost.local/>]>
は、私はまた、これを使用しますか?
UPD:
サーバーのログインコードです:
@api.route("/login/", methods=["POST"])
def handle_login_request():
login, password = str(request.form['login']).lower(), str(request.form['password'])
# Get and check user here
login_user(user)
# update user and get user_data
return jsonify(user_data)
担保ルート:
@api.route("/users_of_group/")
@login_required
def get_user_of_users_group():
# code here never executes because of @login_required
api
がフラスコの青写真の名前です
UPD2:
sess.get
によって返されたページの内容です
:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>401 Unauthorized</title>
<h1>Unauthorized</h1>
<p>The server could not verify that you are authorized to access the URL requested. You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.</p>
UPD3:最初のユーザーに正常にログインしていることを、私が見ることができるサーバで
r = sess.get("http://secure.page/on/the/site", auth=("login", "password"))
、しかし: 私はこれを使用しようとしましたサーバーはとにかく401をスローします。
import requests
sess = requests.session()
login = sess.post("http://page.on/my/site", data={"login" : "login", "password" : "password"})
r = sess.get("http://secure.page/on/the/site", cookies=login.cookies)
また、ユーザーがログインしてから401
UPD4スロー:
問題をLOGIN_USER機能にあるように見える、それはTrue
にis_authenticated
は変更されません。私はSQLAlchemyのを使用して、これは私のユーザークラスです:
class User(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
# Many required for my app fields
is_active = db.Column(db.Boolean, default=False)
is_authenticated = db.Column(db.Boolean, default=False)
is_anonymous = db.Column(db.Boolean, default=False)
is_online = db.Column(db.Boolean, default=False)
# Init function
def get_id(self):
return str(self.user_id)
そしてuser_loader
:
@login_manager.user_loader
def load_user(user_id):
print(user_id, type(user_id))
user = User.query.filter_by(user_id=int(user_id)).first()
print(user.login, user.is_authenticated)
return user
IDは、正しく印刷され、その種類はstr
で、クエリがうまく動作しますが、私はまだUnauthenticated
エラーを取得しており、最後にprint
user.is_authenticated
はFalseです。
UPD5:
は実際には、ちょうどlogin_user
後user.is_authenticated
を印刷することも、私はlogin_user
後session.commit()
と呼ばれるにもかかわらず、Falseを示しています。
ドキュメントによると、セッション保護はアクティブで、各要求は、ユーザーのコンピュータの識別子(基本的に、IPアドレスとユーザーエージェントの安全なハッシュ)を生成します。それはまったく問題であるように見えます。完全な[mcve]を投稿できますか? –
@WayneWerner、私の更新された回答を参照してください –
質問からユーザーローダーとユーザークラスが欠落していますが、私の答えがあなたの問題を解決する可能性があります。 –