我正在创建一个Flask选举应用程序,它有两个主要模块:一个manage
模块,用于管理您创建的选举,以及一个vote
模块,选民可以投票。 manage
和vote
都是通过蓝图实现的。
这两个部分都需要身份验证,因此特定用户无法编辑彼此的选举,因此选民可以通过身份验证只投票一次。由于预期的用例,选民(在vote
模块中)仅由用户名标识,选举管理员(在manage
中)有用户名和密码(不确定这是否相关)。 / p>
我已经很好地实现了manage
系统,但我的问题在于实现vote
模块。由于我在flask-login
模块中使用manage
,每当选举管理器登录时,它都会计入vote
模块,这会导致在模块之间导航时出现未定义的行为。我需要在两个模块中将用户身份验证分开。
如何在同一个应用中运行单独的flask-login
实例,以使current_user
模块中的manage
与vote
模块中的{{1}}不同?我已经考虑过使用cookie来实现这一点,但是所有在线解决方案都围绕在同一台服务器上为不同的应用程序创建单独的实例,而不是在同一个应用程序中创建不同的模块。
答案 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
模块执行相同操作,只需检查角色并在适当时强制注销。
这样做的好处是永远不会有不明确的行为;但是,它不允许在管理员和选民之间轻松切换,因为当您导航到另一个模块时,您将从前一个模块中退出。虽然这种行为在生产中会很好(因为你不应该管理选举并让一个人在同一台计算机上投票),但这会使选举的测试和设置变得痛苦。要绕过强制注销,请在一个浏览器中登录经理帐户/模块,在另一个浏览器中登录选民帐户/模块,这样您就不会被强制退出。
我仍然愿意接受一个允许两个登录彼此独立存在的解决方案。