main view продолжает перенаправлять на страницу входа даже для авторизованного пользователя в django - PullRequest
0 голосов
/ 27 октября 2019

мой основной вид:

def main(request):
if request.user.is_authenticated:
    return render(request,'main/main.html',{'use':use,'query':query,'noter':noter,'theme':request.user.profile.theme})
else:
    return redirect('home')

домашняя страница отвечает за обслуживание формы входа:

def home(request):
if request.user.is_authenticated:
    return redirect('main')
else:
    return render(request,'home.html')

"home.html" использует ajax для отправки страницы входа

$(document).ready(function(){
$('#form2').submit(function(event){
    event.preventDefault();
    $('#username_error').empty();
    $("#password_error").empty();
    var csrftoken = $("[name=csrfmiddlewaretoken]").val();
    var formdata={
        'username':$('input[name=username2]').val(),
        'password':$('input[name=loginpassword]').val(),
    };



    $.ajax({
        type:'POST',
        url:'/Submit/logging',
        data:formdata,
        dataType:'json',
        encode:true,
        headers:{
        "X-CSRFToken": csrftoken
        },
    })

    .done(function(data){

        if(!data.success){//we will handle error
            if (data.password){
                    $('#password_error').text(data.password);
            }
            if(data.Message){
                $('#password_error').text("You can't login via pc");

            }
            blocker();


            return false;

        }
            else{
                window.location='/';
            }

    });
    event.preventDefault();
});

эта конфигурация работает нормально, но главная страница продолжает перенаправлять на home.html, даже если пользователь уже вошел в систему. Я использую сервер nginx, конфигурация которого

server {
server_name host.me www.host.me;

location = /favicon.ico { access_log off; log_not_found off; }

location /static/ {
        root /home/username/projectname;
}


location /media/ {
        root /home/username/projectname/appname;
}


location / {
        include proxy_params;
        proxy_pass http://unix:/home/username/projectname/projectname.sock;
}

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.host.me/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.host.me/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}server {
if ($host = www.host.me) {
    return 301 https://$host$request_uri;
} # managed by Certbot


if ($host = host.me) {
    return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
server_name host.me www.host.me;
return 404; # managed by Certbot




}

Edit 1 URL-адреса соответствующих представлений:

path('home',views.home,name='home'),
path('',views.main,name='main'),
path('Submit/logging',views.Loging,name='Loging'),

, в то время как мое представление для выполнения входа в систему

def Loging(request):
if request.user_agent.is_pc:
    return JsonResponse({'Message':'pc'})
else:
    username1=request.POST['username']
    print(username1)
    username=username1.lower()
    password=request.POST['password']
    print(password)
    user=authenticate(request,username=username,password=password)
    if user is not None:
        login(request,user)
        return JsonResponse({'success':True})
    else:
        return JsonResponse({'password':'The user credentials do not exist in our database'})

Также, если пользователь пытается получить доступ к веб-сайту с другой конечной точки URL-адреса(скажем, mywebsite.me/another) & уже аутентифицирован, тогда это приведет к правильному просмотру, что означает, что вход в систему выполнен правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...