Django之前后端分离自定义token认证
在Django中实现前后端分离时,可以使用自定义的Token进行身份验证。以下是一个简化的示例,展示了如何创建和使用自定义Token进行身份验证:
首先,在Django的views.py中创建一个视图来生成和验证Token:
import jwt
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import csrf_exempt
SECRET_KEY = 'your_secret_key'
# 生成Token的函数
def generate_token(user):
payload = {
'user': user,
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return token
# 验证Token的函数
def validate_token(token):
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return payload['user']
except jwt.ExpiredSignatureError:
return None
except jwt.InvalidTokenError:
return None
# 创建API视图来生成Token
@csrf_exempt
@require_http_methods(['POST'])
def login(request):
username = request.POST.get('username')
# 假设验证逻辑是用户存在且用户名和密码正确
if username == 'user' and request.POST.get('password') == 'pass':
token = generate_token(username)
return JsonResponse({'token': token})
return JsonResponse({'error': 'Invalid credentials'}, status=401)
# 创建另一个API视图来验证Token
@csrf_exempt
def protected_view(request):
token = request.META.get('HTTP_AUTHORIZATION')[7:]
user = validate_token(token)
if user:
# Token有效,执行保护视图的逻辑
return JsonResponse({'message': f'Hello, {user}'})
else:
# Token无效,返回错误信息
return JsonResponse({'error': 'Invalid or expired token'}, status=403)
在上述代码中,login
视图用于生成Token,protected_view
视图用于验证Token并提供受保护的内容。在实际应用中,你需要根据自己的身份验证逻辑来替换用户验证部分的代码。
确保你已经安装了PyJWT
库,这是用于生成和验证Token的库:
pip install PyJWT
在实际部署时,你还需要配置Django的中间件,以便在每个请求上应用Token验证,但这超出了这个问题的范围。
评论已关闭