如何安全地执行Rest请求而无需身份验证?

时间:2017-06-17 20:41:28

标签: django rest authentication

这是一个过程逻辑问题,而不是特定的语言框架问题。

我正在开发一个移动应用程序,并希望用户能够使用它而无需登录(即尝试并为已登录的用户提供加号),但我不希望其他人发布帖子请求如果没有某种键,我们会说邮递员或任何其他平台而不是应用程序,那么这里的方法是什么?

我正在考虑使用一些秘密用户名进行基本身份验证:访客密码或某种令牌,但由于我是全新的,我不确定这是否是正确的方法,我已经阅读了身份验证和权限Django Rest Framework教程但没有找到解决方案

1 个答案:

答案 0 :(得分:1)

我自己正在学习Django并且已经掌握了该主题中更高级的主题。你可以做的是在你的permissions.py文件中创建一个函数。像这样:

from rest_framework import permissions

class specialMobileUserPermissions(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in request.SAFE_METHODS:
            return True

        if request.user.id == whatever your mobile users id is:
            return false

        return obj.id == request.user.id # if the user is a subscribed user and they are logged in return true

        return false # because we need a way out if none of the above works

因此,在处理权限类时,permissions.SAFE_PERMISSIONS是一个非破坏性的权限列表。因此,第一个if语句要求您使用GET,HEAD或其他非数据更改方法。如果是,则返回true。

第二个if语句检查发出请求的用户的用户ID。如果该用户ID等于您为移动路径用户设置的用户ID,则它将返回false,拒绝对此类所使用的任何权限。

在您的视图集中,您需要添加permissions_classes变量,如下所示

from . import permissions # your permissions.py file

class FooViewSet(viewsets.ViewSet):
    permission_classes = (permissions.specialMobileUserPermissions,)

除非你需要额外的功能,否则这应该是你需要的一切,一直到导入。我希望我有所帮助。