我有以下设置:
我现在必须将Django前端集成到用java和angular编写的第三方项目中。身份验证完全由第三方处理。
用户通过LDAP登录并创建JWT令牌。
是否可以简单地在Django中接收令牌并在成功解码令牌后验证用户?当我有受保护的函数时,如何使用@login_required装饰器?
是否存在某种我可以指导的项目,或者我是否必须自己编写?
答案 0 :(得分:0)
我使用内置的User
模型来存储用户名。这使我能够在身份验证成功时登录用户,然后使用Django功能,例如@login_requested
,因为您通常会使用它们。
下面是一个示例代码(没有REST身份验证代码)。
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.views.decorators.cache import never_cache
@never_cache
def user_login(request):
''' User login '''
if request.user.is_authenticated:
return HttpResponseRedirect(reverse('main:index'))
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# Your code for authentication here
# authenticate = ....
if authenticate:
# Get user // create one if it doesn't exist yet
user, created = User.objects.get_or_create(username=username)
# Login user - @login_required decorator can be used after user has been logged in
login(request, user)
next = request.POST.get('next', '/') if request.POST.get('next') else '/'
return HttpResponseRedirect(next)
else:
messages.warning(request, 'Authentication failed', extra_tags=forgot_password)
return HttpResponseRedirect(reverse('main:login'))
else:
return render(request, 'main/login.html', {})