如何阻止/覆盖Djoser用户/我端点?

问题描述

我想知道是否有机会针对特定请求方法阻止djoser的xetra11@pop-os:~$ whois 192.168.80.197 OrgName: Internet Assigned Numbers Authority OrgId: IANA Address: 12025 Waterfront Drive Address: Suite 300 City: Los Angeles StateProv: CA PostalCode: 90292 Country: US 端点。我在文档中没有看到这个。

问题:现在,当我有两个用户user/me时。我可以使用第一个用户更改他的电子邮件以匹配第二个用户的电子邮件,这样两个人将拥有相同的电子邮件,而第二个将被阻止。

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

解决方法

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,**kwargs)

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

您应该始终对用户电子邮件设置uniquepk约束。 djoser没有责任保证您数据库中唯一的电子邮件。

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

如果您使用unique,则不会是2xx,并且您会知道出了点问题。无法从djoser级别“检查”电子邮件是否存在,并且永远不会,因为其目的是为Django提供通用的REST身份验证。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...