我试图在我的烧瓶应用程序之前进行简单登录 - 没有数据库,没有记住用户名,只有表单,如果表单的输入与密码匹配,请让他们进入。
我一直在浏览身份验证教程,例如Miguel Grinberg's Mega-Tutorial, 和bkdinoop's all-in-one login,我有一个重定向到我的索引的登录页面,只有当表单字段与预定义的字符串匹配时才会这样做。
但是,如果我使用@login_required(来自于flask.ext.login)标记索引,那么它永远不会找到登录用户并将永远重定向到登录页面。
我尝试制作一个假人"所有"用户类,如下所示:
class User():
def is_active(self):
return True
def get_id(self):
return "all"
但是调试器告诉我:
File "/flask_login.py", line 281, in reload_user
user = self.user_callback(user_id)
TypeError: 'NoneType' object is not callable
有没有更容易的方法来破解简单的身份验证,而不会纠缠于用户/密码/使用db / etc?我只需要确保这个网页不会被机器人抓取,这些机器人会将我们的照片编入索引,而不是实际让人们离开。
我是否在正确的轨道上 - 我是否应该继续尝试找到一个虚拟的用户配置,以便通过烧瓶登录?
感谢您的帮助
莫妮卡
答案 0 :(得分:2)
您可能已阅读过,Flask-Login不要求您使用数据库。但是,它要求您拥有一个具有某种ID的用户(即使您使用“all”完成了ID)。它还要求您实现以下功能,如文档中所示:
@login_manager.user_loader
def load_user(userid):
# Return the user ID here.
此方法的要点是您需要指定如何通过用户名标识用户。在某人从数据库中检索用户信息的情况下,他们将实现此方法以在此处调用数据库。在您的情况下,您将使此方法返回您在上面使用的用户对象的实例:
@login_manager.user_loader
def load_user(userid):
return User()
现在,实际上,您的User
方法尚未完成。要使用flask-login,您需要它来实现more methods,因此请确保实现所有这些。
答案 1 :(得分:1)
这种情况正在发生,因为您尚未设置user_loader回调。您需要在某处定义以下方法:
@login_manager.user_loader
def load_user(_id):
return User()