2

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

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

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

4

1 回答 1

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 身份验证。

于 2020-09-21T15:36:22.567 回答