Flask App上的单密码验证

时间:2013-12-05 21:22:42

标签: python authentication flask flask-login

我试图在我的烧瓶应用程序之前进行简单登录 - 没有数据库,没有记住用户名,只有表单,如果表单的输入与密码匹配,请让他们进入。

我一直在浏览身份验证教程,例如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?我只需要确保这个网页不会被机器人抓取,这些机器人会将我们的照片编入索引,而不是实际让人们离开。

我是否在正确的轨道上 - 我是否应该继续尝试找到一个虚拟的用户配置,以便通过烧瓶登录?

感谢您的帮助

莫妮卡

2 个答案:

答案 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()