问题描述
我想知道是否有机会针对特定请求方法阻止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'}时。我可以使用第一个用户更改他的电子邮件以匹配第二个用户的电子邮件,这样两个人将拥有相同的电子邮件,而第二个将被阻止。
您应该始终对用户电子邮件设置unique
或pk
约束。 djoser没有责任保证您数据库中唯一的电子邮件。
是否有一种优雅的方法来检查djoser级别的电子邮件是否存在?
如果您使用unique
,则不会是2xx,并且您会知道出了点问题。无法从djoser级别“检查”电子邮件是否存在,并且永远不会,因为其目的是为Django提供通用的REST身份验证。