我正在制作基于文本的浏览器游戏,但我的登录脚本有问题。 我登录时没有任何反应,它甚至不会重定向。烧瓶登录不会登录
这里是我的代码:
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