Django:使用查询参数进行授权

时间:2018-06-29 19:24:10

标签: python django microservices

我正在编写一个聊天应用程序,注册用户可以在其中相互发送消息。

其中的一个组件是基于Django的消息微服务,该服务具有用于发送和接收消息的API。为简单起见,只有两个URL:

# List all messages in Thread "thread_id"
GET /threads/<int:thread_id>/messages/?user_id=123

# Send a message as user "user_id" to Thread "thread_id"
POST /threads/<int:thread_id>/messages/?user_id=123

此服务仅在内部可见,因此不可能欺骗user_id

授权基于user_id,它作为查询参数传递给服务并按以下方式处理:

views.py

class MessagesViewClass(django.views.View):

    def get(request, thread_id):

        # If this user is not part of this thread
        user_id = request.GET.get('user_id')
        if this_user_not_part_of_this_thread(user_id, thread_id):
            raise Some403Exception()

        else:
            process_response_normally()

现在,我正在通过查询参数进行验证。是否有更常规或规范的方式来处理这种类型的授权?

1 个答案:

答案 0 :(得分:2)

由于只允许登录用户查看和接收消息,因此无需在查询参数中发送user_id。您可以使用request.user.id来获取登录用户的用户ID。