在Django REST framework中使用会话(Session)进行认证和授权

2023-04-11 00:00:00 会话 认证 授权

在Django REST framework中使用会话进行认证和授权,可以通过以下步骤实现:

  1. 在settings.py文件中添加以下配置:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

这样,将默认使用SessionAuthentication进行认证,IsAuthenticated进行授权。

  1. 在路由配置中添加Login和Logout视图:
from django.urls import path
from rest_framework.authtoken.views import obtain_auth_token
from .views import LoginView, LogoutView

urlpatterns = [
    path('api/token', obtain_auth_token, name='api_token_auth'),
    path('login', LoginView.as_view(), name='login'),
    path('logout', LogoutView.as_view(), name='logout')
]

其中,Login视图可以通过验证用户名密码,从而创建Session,实现认证;Logout视图可以销毁Session,实现退出登录。

代码实现如下:

from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response

class LoginView(APIView):
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return Response({'message': '登录成功'})
        else:
            return Response({'message': '用户名或密码错误'})

class LogoutView(APIView):
    def post(self, request):
        logout(request)
        return Response({'message': '退出登录'})

在上述代码中,我们使用了Django自带的authenticate、login、logout等函数来实现相关功能。

  1. 在视图函数中通过request.user来获取当前用户对象,进而进行授权验证:
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated

class SomeView(APIView):
    permission_classes = [IsAuthenticated]
    def get(self, request):
        user = request.user
        # TODO: some logic with authenticated user

在上述代码中,我们通过IsAuthenticated来进行授权验证,如果用户未认证,则不允许访问SomeView视图。同时,我们也演示了如何通过request.user来获取当前认证的用户对象。

相关文章