認證元件
阿新 • • 發佈:2018-11-14
urls.py
urlpatterns = [ url(r'^user$',UserView.as_view()), # 在資料空中寫入username和token url(r'^test',TestAuthView.as_view()), # 認證測試檢視 http://127.0.0.1:8000/test?token=20609ddd01fe4faeb0ffe7d8d8c39881
]
檢視
from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response from .models import UserInfo from utils.Auth import MyAuth import uuid # Create your views here. class UserView(APIView): def post(self, request): # 這相當於註冊 username = request.data["username"] UserInfo.objects.create(username=username, token=uuid.uuid4()) return Response("ok") class TestAuthView(APIView): authentication_classes = [MyAuth,] # 這相當於登入的認證 def get(self, request): print(request.user) print(request.auth) return Response("認證測試")
自己寫的認證類
from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import AuthenticationFailed from AuthDemo.models import UserInfo from rest_framework.response import Response class MyAuth(BaseAuthentication): def authenticate(self, request): # 第一步先拿到前端傳過來的token token = request.query_params["token"] # 驗證token是否存在 user_obj = UserInfo.objects.filter(token=token).first() if user_obj: return (user_obj, token) else: raise AuthenticationFailed("認證失敗")