这是一个过程逻辑问题,而不是特定的语言框架问题。
我正在开发一个移动应用程序,并希望用户能够使用它而无需登录(即尝试并为已登录的用户提供加号),但我不希望其他人发布帖子请求如果没有某种键,我们会说邮递员或任何其他平台而不是应用程序,那么这里的方法是什么?
我正在考虑使用一些秘密用户名进行基本身份验证:访客密码或某种令牌,但由于我是全新的,我不确定这是否是正确的方法,我已经阅读了身份验证和权限Django Rest Framework教程但没有找到解决方案
答案 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,)
除非你需要额外的功能,否则这应该是你需要的一切,一直到导入。我希望我有所帮助。