我正在製作基於文本的瀏覽器遊戲,但我的登錄腳本有問題。 我登錄時沒有任何反應,它甚至不會重定向。燒瓶登錄不會登錄
這裏是我的代碼:
from flask import Flask,render_template,redirect,request,url_for,session
from flask_login import LoginManager, current_user, login_user, login_required
# this contains the configuration and the database connection
from config import users, stats, register_user
from werkzeug.security import check_password_hash
# load the user model
from user import User
version = 2.00
app = Flask(__name__)
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
app.config['SECRET_KEY'] = "lkajdghdadkglajkgah"
#the user loader callback
@login_manager.user_loader
def load_user(user_id):
u = users.find_one({"_id": user_id})
if not u:
return None
return User(u['_id'])
@app.route('/')
def main():
if current_user.is_authenticated:
return redirect("/game/", code=302)
else:
return redirect("/login/", code=302)
@app.route('/login/', methods=['GET','POST'])
def login():
if current_user.is_authenticated:
return redirect("/game/", code=302)
# when the form is filled in
if request.method == 'POST':
try:
# login user
if request.form['logSubmit'] == 'logSubmit':
username = request.form['logUser']
password = request.form['logPassword']
result = users.find_one({"user": username})
if result and check_password_hash(result['password_hash'], password):
resid = result['_id']
print(resid)
user_obj = User(resid)
login_user(user_obj)
return redirect(request.args.get("next") or url_for("game"))
except KeyError:
# register the user
if request.form['regSubmit'] == 'regSubmit':
username = request.form['regUser']
password = request.form['regPassword']
address = request.form['regAddress']
register_user(username=username,password=password,address=address)
print(address)
return redirect("/login/", code=302)
return render_template('out.html')
@app.route('/game/')
@login_required
def game():
return render_template('game.html')
@app.route('/logout')
def logout():
logout_user()
return redirect("/login/", code=302)
,這裏是我的用戶等級:
class User():
def __init__(self,id):
self.id = id
self.email = None
print (str(id)+" has logged in.")
#def getStats(self):
#get the statistics of the user from the database
#return "your getStats() is still under construction"
@property
def is_authenticated(self):
return True
@property
def is_active(self):
return True
@property
def is_anonymous(self):
return False
def get_id(self):
return str(self.id)
我找了幾個小時,現在的解決方案,我有一個讀燒瓶登錄的完整文檔,但我無法弄清楚。
請幫幫我。
編輯:我刪除了舊的代碼,並添加了新的代碼,但它仍然無法正常工作。
在你的用戶'你正在用函數覆蓋你的屬性。這樣'user.is_authenticated'將返回一個函數對象,而不是所需的布爾值。在Python中,如果可能的話,通常會跳過函數getters/setters。所以只要刪除getter函數,你應該沒問題。 – MrLeeh
您的'用戶'對象在代碼中的任何地方都沒有定義。它可能是一個錯字或由*進口導入。我不能說清楚。這就是爲什麼你應該避免*進口的原因。 – MrLeeh
@MrLeeh我試圖刪除getter函數,但它仍然不起作用。用戶對象的確來自config。 – ruttydm