Python Flask login@login\u必需不工作
我使用flask登录来确保用户在访问某些页面之前已登录。我在想要保护的视图上使用了Python Flask login@login\u必需不工作,python,flask,flask-login,Python,Flask,Flask Login,我使用flask登录来确保用户在访问某些页面之前已登录。我在想要保护的视图上使用了@login\u required,但即使我在想要设置用户的位置设置了login\u user(user),它也不允许我进入受保护的路由(索引)。我正在打印我的user\u登录名(user)的值,它返回True。我做错了什么 @app.route('/') @app.route('/index') @login_required def index(): print("was in here", file=
@login\u required
,但即使我在想要设置用户的位置设置了login\u user(user)
,它也不允许我进入受保护的路由(索引)。我正在打印我的user\u登录名(user)
的值,它返回True
。我做错了什么
@app.route('/')
@app.route('/index')
@login_required
def index():
print("was in here", file=sys.stderr)
return render_template('index.html')
这是我设置user\u登录(user)
这是我的用户加载程序
@login_manager.user_loader
def load_user(userid):
try:
return models.User.get(models.User.id == userid)
except models.DoesNotExist:
return None
这是我的用户模型
sqlite_db = SqliteDatabase('sqlite.db')
class BaseModel(Model):
class Meta:
database = sqlite_db
class User(UserMixin, BaseModel):
username = CharField(unique=True)
quizlet_id = CharField(unique=True)
joined_at = DateTimeField(default=datetime.datetime.now)
@classmethod
def create_user(cls, username, quiz_id, **kwards):
try:
cls.select().where(
(cls.username == username) | (cls.quizlet_id == quiz_id)
).get()
except cls.DoesNotExist:
print("putting user in thing", file=sys.stderr)
user = cls(username = username, quizlet_id = quiz_id)
print(user.username)
user.save()
return user
else:
raise Exception("User with that email exists already")
@staticmethod
def set_password(password):
return generate_password_hash(password.encode('utf-8'))
用户名字段是主键吗?假设您使用的是sql alchemy,get()方法总是查找主键,不接受表达式,请参阅
请使用
user=models.user.filter_by(username=response['username'])重试。
..如果您使用的是flask登录,则需要确保库可以使用您的函数根据ID加载用户。
这种类型的东西:
@login_manager.user_loader
def load_user(user_id):
return models.User.get(models.User.id == user_id)
请阅读文档了解如何操作。刚刚花了2个小时试图解决此问题,并意识到这是因为关闭了所需的登录配置而无法工作 在我当地的发展环境中,我设置了
app.config['TESTING']=True
从
如果应用程序配置变量登录被禁用或测试被禁用
设置为True时,将忽略所需的登录\u装饰程序
把它设回这个位置,让它工作起来
@app.before_first_request
def init_app():
logout_user()
app.config['TESTING']=False
我的问题是@flask\u login.login\u required
decorator位于@app.route(“”)
decorator之上,所以我刚刚替换了它们,它就工作了
由此:
@flask_login.login_required
@app.route('/')
def index():
return render_template("index.html")
为此:
@app.route('/')
@flask_login.login_required
def index():
return render_template("index.html")
只需检查用户是否已登录。用户可能登录了一个cookie。 我通过将用户设置为已登录并添加了 饼干。
我刚刚加了这个,让它工作了
@app.before_first_request
def init_app():
logout_user()
它工作得非常好您的
用户\u加载程序
回调定义在哪里?@MattHealy与我的路由在同一个文件中。我已经在上面添加了它如果你在调试模式下运行应用程序,你会遇到什么错误?我没有收到错误我使用的是sqlite3,我已经添加了我的用户模型(无法编辑我的上一条评论),我使用pewee ORM实现了你的代码,我面临的问题是因为try exep else在login\u user()上禁止了一个异常
,这表明ORM上登录所需的方法存在问题。用户混合在哪里?你可以看到我的代码,希望它能帮助你…我有了加载程序。我不认为这是问题所在。这里的语法是错误的models.User.id==User\u id
是一个布尔值,因此您正在调用models.User.get(True)
,这没有帮助。这需要更改为models.User.get(User\u id
这使我免于数小时的挠头。谢谢。猜猜是谁挠头了一整天