【问题标题】:Single-Passcode Authentication on a Flask AppFlask 应用程序上的单密码身份验证
【发布时间】:2013-12-05 21:22:41
【问题描述】:

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

我一直在学习身份验证教程,例如 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

有没有更简单的方法来破解简单的身份验证,而不会纠结于用户/密码/使用数据库/等?我只需要确保这个网页不会被机器人抓取,这些机器人会为我们的照片编制索引,而不是真正将人们拒之门外。

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

感谢您的帮助

莫妮卡

【问题讨论】:

  • 您考虑过robots.txt 文件吗?
  • 是的,我也有一个。我认为简单的登录也会让我的老板对拥有一个网络应用程序感觉更好。

标签: python authentication flask flask-login


【解决方案1】:

您可能已经阅读过,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,所以一定要全部实现。

【讨论】:

    【解决方案2】:

    发生这种情况是因为您尚未设置 user_loader 回调。您需要在某处定义以下方法:

     @login_manager.user_loader
     def load_user(_id):
         return User()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2020-09-18
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多