【问题标题】:How to block/override djoser user/me endpoint?如何阻止/覆盖 djoser 用户/我的端点?
【发布时间】:2020-12-26 03:13:39
【问题描述】:

我想知道是否有机会针对特定请求方法阻止 djoser 的 user/me 端点。我在文档中没有看到这个。

问题:现在当我有两个用户{ email: 'a@exa.com' }, and { email: 'b@exa.com' }。我可以使用第一个用户更改他的电子邮件以匹配第二个用户的电子邮件,因此两者将拥有相同的电子邮件,而第二个将被阻止。

有没有一种优雅的方法可以从 djoser 级别检查电子邮件是否存在?

【问题讨论】:

  • 至于我,你应该把它寄给 djoser 的作者。

标签: python django djoser


【解决方案1】:

这里是 Djoser 维护者。

我想知道是否有机会针对特定请求方法阻止 djoser 的用户/我端点。我在文档中没有看到这个。

您需要继承 UserViewSet 并更改 me 操作或在 get_permissions 中添加自定义权限。

所以如果你想禁用/限制PUT

class MyCustomUserViewSet(UserViewSet):
    def get_permissions(self):
        if self.action == "me" and self.request.method == "PUT":
            # do something
        return super().get_permissions()

class MyCustomUserViewSet(UserViewSet):
    @action(["get", "patch", "delete"], detail=False)
    def me(self, request, *args, **kwargs):
        return super().me(request, *args, **kwargs)

问题:现在我有两个用户 { email: 'a@exa.com' } 和 { email: 'b@exa.com' }。我可以使用第一个用户更改他的电子邮件以匹配第二个用户的电子邮件,因此两者将拥有相同的电子邮件,而第二个将被阻止。

您应该始终对用户电子邮件有uniquepk 限制。 djoser 不负责保证您的数据库中的电子邮件是唯一的。

有没有一种优雅的方法可以从 djoser 级别检查电子邮件是否存在?

如果您使用unique,那么它不会是 2xx,您就会知道出了点问题。没有办法从 djoser 级别“检查”电子邮件是否存在,并且永远不会存在,因为它的目的是成为 Django 的通用 REST 身份验证。

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 2011-01-19
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多