在我的网站上,人们无需登录即可查看REST API提供的图像。我想使一些API不需要用户令牌。因此,我进行了一些研究,并找到了下面的方法。
由于我需要使用这种方式进行生产,因此我想确保这是一种安全的方式。通过API提供的商店仅存储数据,例如名称,URL,描述和图像。他们中的任何一个都与任何用户都不相关。
我可以在生产中使用吗?众所周知,我使用Django REST框架将数据提供给前端,并使用React js在前端显示它们。
from rest_framework.decorators import authentication_classes, permission_classes
@authentication_classes([])
@permission_classes([])
class ListAllStores(APIView):
def get(self, request, format=None):
all_stores = Store.objects.all()
serializer = StoreSerializer(all_stores, many=True)
return Response(data=serializer.data)
答案 0 :(得分:0)
您可以尝试在每个请求的标头上发送用户类型的链接。 对于没有令牌的API,请以匿名形式发送userType或类似的内容 对于带有令牌的API,请将userType作为客户或类似的对象发送。
创建一个从每个端点首先调用的方法,并验证Request标头。
如果要使其更通用,可以将此端点和用户类型映射为元数据设置,因此下一次,如果您有某个'/ image'端点,仅允许该用户类型使用,现在您希望它也应该被允许匿名使用,以便可以使用该元数据文件轻松完成而无需更改代码。
答案 1 :(得分:0)
您可以使用AllowAny
权限类来明确显示该权限,该类将允许公众访问该端点。
from rest_framework import permissions, views
class ListAllStores(views.APIView):
permission_classes = (
permissions.AllowAny,
)
def get(self, request, format=None):
all_stores = Store.objects.all()
serializer = StoreSerializer(all_stores, many=True)
return Response(data=serializer.data)