带有两个模块的Flask应用程序,都必须具有单独的flask-login

时间:2017-08-28 20:47:50

标签: flask flask-login

我正在创建一个Flask选举应用程序,它有两个主要模块:一个manage模块,用于管理您创建的选举,以及一​​个vote模块,选民可以投票。 managevote都是通过蓝图实现的。

这两个部分都需要身份验证,因此特定用户无法编辑彼此的选举,因此选民可以通过身份验证只投票一次。由于预期的用例,选民(在vote模块中)仅由用户名标识,选举管理员(在manage中)有用户名和密码(不确定这是否相关)。 / p>

我已经很好地实现了manage系统,但我的问题在于实现vote模块。由于我在flask-login模块中使用manage,每当选举管理器登录时,它都会计入vote模块,这会导致在模块之间导航时出现未定义的行为。我需要在两个模块中将用户身份验证分开。

如何在同一个应用中运行单独的flask-login实例,以使current_user模块中的managevote模块中的{{1}}不同?我已经考虑过使用cookie来实现这一点,但是所有在线解决方案都围绕在同一台服务器上为不同的应用程序创建单独的实例,而不是在同一个应用程序中创建不同的模块。

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的方案,或者至少是一种解决方法:

您可以创建一个If Target.Address = "$A$7" Then 基类,其中包含从其继承的If Target.Address Like "$A$[7-9]" Or Target.Address Like "$A$1[0-8]" Then User类。对于所有Manager个网页,在查询Voter时也会检查是否为manage;否则,如果它是current_user,则强制注销并让管理员登录。对Manager模块执行相同操作,只需检查角色并在适当时强制注销。

这样做的好处是永远不会有不明确的行为;但是,它不允许在管理员和选民之间轻松切换,因为当您导航到另一个模块时,您将从前一个模块中退出。虽然这种行为在生产中会很好(因为你不应该管理选举并让一个人在同一台计算机上投票),但这会使选举的测试和设置变得痛苦。要绕过强制注销,请在一个浏览器中登录经理帐户/模块,在另一个浏览器中登录选民帐户/模块,这样您就不会被强制退出。

我仍然愿意接受一个允许两个登录彼此独立存在的解决方案。