首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在本例中包含对Django REST API的用户特定访问权限?

如何在本例中包含对Django REST API的用户特定访问权限?
EN

Stack Overflow用户
提问于 2015-10-17 01:37:41
回答 1查看 1.1K关注 0票数 0

我对通过API进行身份验证的理解是,客户端发送的HTTP请求需要包括凭据,无论是原始用户名和密码(可能是不好的做法),还是散列的密码、令牌等。

通常在我的Django视图中,我只使用:

代码语言:javascript
运行
复制
request.user.is_authenticated():

如果我希望我的应用程序接口与iOS应用程序一起使用,这行代码不能使用,因为它依赖于会话/cookies?

我想编辑以下函数,以允许其访问特定用户:

代码语言:javascript
运行
复制
api_view(['GET'])
@csrf_exempt
def UserInfoAPI(request):
    ###if HTTP header includes name and password:###
        private_info = Entry.objects.filter(user=request.user)
        serializer = EntrySerializer(private_info, many=True)
    return Response(serializer.data)

有没有一种简单的方法来手动检查HTTP报头中的用户名/pass?我实际上并不打算在生产环境中使用它,但为了理解,我想了解一下如何使用此函数验证http头中的用户名/pass。

EN

回答 1

Stack Overflow用户

发布于 2015-10-17 03:34:59

Django REST Framework试图通过查看Authorization HTTP头来确定发送请求的用户。您应该在此标头中发送的内容取决于您选择的身份验证方案。例如,如果选择BasicAuthentication,则标头将为:

代码语言:javascript
运行
复制
Authorization: Basic <"user:password" encoded in base64>

或者,如果选择TokenAuthentication

代码语言:javascript
运行
复制
Authorization: Token <your token>

我会推荐TokenAuthentication方案。docs中列出了更多方案。

要确保只有经过身份验证的用户才能访问该接口的端点,请使用IsAuthenticated权限。这将检查请求中用户的凭据,如果它们不正确,则会引发HTTP 401 Unauthorized错误。

您的Django REST Framework视图将如下所示:

代码语言:javascript
运行
复制
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated

class UserInfo(generics.ListAPIView):
    model = Entry
    serializer_class = EntrySerializer
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        queryset = super(UserInfo, self).get_queryset()
        user = self.request.user
        return queryset.filter(user=user)

至于iOS应用程序中的代码,this post可能会有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33176379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档