У меня есть сервер django, который действует как API (т.е. слушает запросы и возвращает данные ТОЛЬКО), и я хочу, чтобы этот API был доступен только для аутентифицированных пользователей.Я прочитал о системе аутентификации django и попытался реализовать ее в соответствии с документацией (https://docs.djangoproject.com/en/2.0/topics/auth/default/).
. Я написал небольшую веб-страницу только для проверки аутентификации - вход был успешным (сервер смог аутентифицировать ивойдите в систему пользователя), но при попытке доступа к ограниченному представлению у меня нет доступа, и полученный запрос.user является AnonymousUser вместо зарегистрированного пользователя.
Я использую Python 3.6.5 и Django 2.0.4
Код сервера:
@csrf_exempt
def dologin(request):
username = request.POST.get('username')
password = request.POST.get('password')
if not username or not password:
return HttpResponse('missing username or password', status=400)
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return HttpResponse(user)
else:
return HttpResponse('bad credentials', status=422)
def dologout(request):
logout(request)
return HttpResponse('success')
@login_required()
def testAccess(request):
return HttpResponse('ok')
def checkUser(request):
u = "anonymous" if not request.user.is_authenticated else request.user.username
return HttpResponse(u)
Код клиента:
<label>username:</label>
<input type="text" id="uin"/>
<label>username:</label>
<input type="text" id="pin"/>
<button id="inbtn">login</button>
<button id="outbtn">logout</button>
<button id="test">test access</button>
<button id="check">check user</button>
<div id="res"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" type="text/javascript"></script>
<script>
$("#inbtn").click(function(){
u = $("#uin").val();
p = $("#pin").val();
d = {username: u, password: p};
$.post("http://10.0.0.9:8000/login/", d, function(data){
$("#res").html(data);
}).fail(function(xhr, status, error){
$("#res").html(xhr.responseText + " - " + xhr.status);
});
});
$("#outbtn").click(function(){
$.get("http://10.0.0.9:8000/logout/", function(data){
$("#res").html(data);
}).fail(function(xhr, status, error){
$("#res").html(xhr.responseText + " - " + xhr.status);
});
});
$("#test").click(function(){
$.get("http://10.0.0.9:8000/testaccess/", function(data){
$("#res").html(data);
}).fail(function(xhr, status, error){
$("#res").html(xhr.responseText + " - " + xhr.status);
});
});
$("#check").click(function(){
$.get("http://10.0.0.9:8000/checkuser/", function(data){
$("#res").html(data);
}).fail(function(xhr, status, error){
$("#res").html(xhr.responseText + " - " + xhr.status);
});
});
</script>
(я все запускаю локально, поэтому я использую 10.0.0.9, который является моимip компьютера)
Как я уже писал ранее - после успешного входа в систему, нажав «проверить доступ», вы получите ответ 404, а «проверить пользователя» вернет «анонимный» (и отладив сервер, которого я знаю, пользователь)действительно AnonymousUser)