添加用户登录要求

2024-04-26 23:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Flask安全性,它反过来又使用Flask登录。我有一个网站,需要一个用户既确认他们的电子邮件地址,随后由管理员批准。如果没有这两个东西,我不希望用户能够使用该网站。你知道吗

我已经打开了SECURITY_CONFIRMABLE,带有确认令牌的电子邮件正在正确发送。我已经设置了SECURITY_POST_CONFIRM_VIEW,用户一旦单击电子邮件中的确认链接,就会被引导到正确的视图。但是,用户登录到as part of the confirmation process。我不想让用户有访问权,直到他们被管理员批准。(有趣的是,this line is not presentdevelop分支中。)

我可以想出四种方法来解决这个问题,但没有一种特别吸引人:

  1. 允许用户在确认后登录,但是用一个函数装饰每个login_required视图,该函数检查用户的权限,如果不允许,则将其发送到错误页。我已经有了其中的两个,我更希望避免在每个视图中添加第三个。另外,当用户在获得批准之前不能使用网站时,允许登录是错误的。

  2. 关闭SECURITY_CONFIRMABLE并亲自发送电子邮件/确认令牌。这将需要复制大量的代码和一个错误的机会比我想高。有没有其他方法可以让用户通过登录绕过这个检查呢?说通过密码重置流程?或者如果未来的管理员使用令牌启用无密码登录?

  3. Monkey patch Flask Security的^{}或Flask Login的^{}执行我的检查。似乎相当黑客,我不知道如何确保我的补丁程序安装之前,任何其他代码连接到原来的功能。

  4. Fork其中一个库并插入一个回调,我可以在代码中实现它。大锤,碰螺母。加上可维护性问题。除非我的公关被接受了。

我希望还有一个答案我忽略了。这不是什么稀奇的安排!你知道吗


Tags: 方法函数代码用户视图密码flask网站
1条回答
网友
1楼 · 发布于 2024-04-26 23:35:55

幸运的是,解决办法比我担心的要容易得多。UserMixin有一个is_active属性,它在Flask登录的login_user的最开始就被查询。所以我的代码看起来像这样:

class User(UserMixin, Base):
    @property
    def is_active(self):
        return (super(UserMixin, self).is_active and not self.has_role('pending'))

现在没有具有“挂起”角色的用户可以登录。你知道吗

相关问题 更多 >