Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ajax django登录系统不工作,它将用户返回为无_Django_Authentication_Django Authentication_Django Login - Fatal编程技术网

ajax django登录系统不工作,它将用户返回为无

ajax django登录系统不工作,它将用户返回为无,django,authentication,django-authentication,django-login,Django,Authentication,Django Authentication,Django Login,我是django的新手,我正在尝试创建一个用户注册和登录系统。我可以注册用户,但不知何故它不会让他们登录。注销系统也运行良好。我不知道我错过了什么 这是我的密码 def register(request): if request.method == 'POST': data={} firstname = request.POST['firstname'] surname = request.POST['surname'] username = request.POST[

我是django的新手,我正在尝试创建一个用户注册和登录系统。我可以注册用户,但不知何故它不会让他们登录。注销系统也运行良好。我不知道我错过了什么

这是我的密码

def register(request):
 if request.method == 'POST':

  data={} 
  firstname = request.POST['firstname']  
  surname = request.POST['surname']
  username = request.POST['username']
  email = request.POST['email']
  password = request.POST['password']
  confirm = request.POST['confirm']

  if password == confirm:
    # check username, so that we do not repeat usernames 
    if User.objects.filter(username=username).exists():

      data['error'] = "This username is taken"

      print(data)

    else:
      if User.objects.filter(email=email).exists():

         data['error'] = "This email is already assigned to another user"

         print(data)

      else:

        user = User.objects.create_user(username=username, email=email,   first_name=firstname,   last_name=surname)

        if password:
          user.set_password(password)
        else:
          user.set_unusable_password()

        user.save()

        user = authenticate(request, username=username, password=password)

        login(request, user)

        data['success'] = "You are successfully registered"

        print(data)
  else:

    data['error'] = "passwords do not match"

    print(data)


  return HttpResponse(simplejson.dumps(data), content_type = "application/json")



 def my_login(request):

   if request.method == 'POST':

  data = {}


  username = request.POST['username']
  password = request.POST['password']

  user = authenticate(request, username=username, password=password)

  print("it all checks out so far")

  if user is None:
    print('no user')


  if user is not None:

    if user.is_active:
      print("user exists")
      login(request, user)

      print("you are logged in")

  else:
    data['error'] = "username or password incorrect"

    print(data)

  return HttpResponse(simplejson.dumps(data), content_type = "application/json")



 def logout(request):
   if request.method == 'POST':

   auth.logout(request)

  return redirect('index')  
这是html

<section id="logging">
<div class="user-container">
  <!-- to make the logout and login dynamic-->
  {% if user.is_authenticated %}

    <div class=" log">
      <a href="{ url 'accounts/dashboard'}" class="register">Welcome {{user.username}}</a>
    </div>

    <div></div> <!--this is to make a div for row grid-->
    <!--create the logout and its form-->
    <div class="log">
        <a href="javascript:{document.getElementById('logout').submit()}"> logout
        </a>
        <form action="{% url 'logout' %}" method="POST" id="logout">
            {% csrf_token %}
            <input type="hidden">
        </form>
    </div>

  {% else %}
    <div></div>

    <!-- link for registration-->
    <div class=" log">
        <i class="fas fa-user"></i> <a href="#" class="register">register</a>
    </div>

    <!--modal for register-->
    <div class="modal" id="modal">

      <div class="modal-content">
        <!--closing button-->
        <a href="#" class="close-window"><i class="fas fa-times"></i></a> 

        <!--top bar-->
        <div class="top-form">
            <i class="fas fa-user"></i> <a href="#">register</a>
        </div>

        <!--form-->
        <div class="form-container">

          <form id="register-form">
            {% csrf_token %} <!--this isto secure my form for forgery -->

            <!-- div for error messages-->
            <div class="messages"></div>

          <!--form content-->
          <div class="form">
              <label for="firstname">name</label> <br>
              <input type="text" name="firstname" class="name" required>
            </div>
            <div class="form">
                <label for="surname">surname</label><br>
                <input type="text" name="surname" class="surname" required>
            </div>
            <div class="form">
                <label for="email">email</label><br>
                <input type="text" name="email" class="email" required>
            </div>
            <div class="form">
              <label for="">username</label><br>
              <input type="text" name="username" class="user" required>
            </div>
            <div class="form">
                <label for="password">password</label><br>
                <input type="text" name="password" class="password" required>
            </div>
            <div class="form">
                <label for="confirm">confirm password</label><br>
                <input type="text" name="confirm" class="confirm" required>
            </div>
            <div class="form">
                <input type="submit" value="submit" class="form-submit register-submit">
            </div>
          </form>

        </div>
      </div>
    </div>

    <!--login link-->
    <div class="login log">
      <i class="fas fa-sign-in-alt" class="login"></i> <a href="#">login</a>
    </div>

          <!--modal for rlogin-->
          <div class="modal" id="modal-login">
              <div class="modal-content2">
                <!--closing button-->
                <a href="#" class="close-window2"><i class="fas fa-times"></i></a> 

                <!--top bar-->
                <div class="top-form">
                    <i class="fas fa-sign-in-alt"></i> <a href="#">login</a>
                </div>


                <!--form-->
                <div class="form-container formo">

                    <form id="login-form">
                      {% csrf_token %} <!--this is to secure my form for forgery -->

                      <!-- div for error messages-->
                      <div class="messages"></div>

                      <div class="form">
                          <label for="">username</label><br>
                          <input type="text" name="username" class="user" placeholder="username/email" required>
                        </div>
                        <div class="form">
                            <label for="password">password</label><br>
                            <input type="text" name="password" class="password" required>
                        </div>
                        <div class="forgot">
                            <div class="userr"><a href="#">forgot username</a></div>
                            <div class="passw"><a href="#">forgot password</a></div>
                          </div>
                        <div class="form">
                            <input type="submit" value="submit" class="form-submit log-submit">
                        </div>
                  </form>

                </div>

                <!--form for forgot password or username-->
                <div class="form-container2">

                    <div class="form">
                      <label for="">email</label><br>
                      <input type="text" name="email" class="email" placeholder="email" required>
                    </div>

                    <div class="form">
                        <input type="submit" value="submit" class="form-submit">
                    </div>

                  </div>
              </div>
            </div>

  {% endif %}
</div>
这是我的ajax

$(document).on('submit', '#register-form', function(e){

  // to prevent the page to reload
  e.preventDefault(); 

  $.ajax({

    type: 'POST', 
    url:'/accounts/register',
    data:{

      firstname:$('.name').val(), 
      surname:$('.surname').val(), 
      email:$('.email').val(),
      username:$('.user').val(), 
      password:$('.password').val(),
      confirm:$('.confirm').val(),
      csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() 

      // I will get messages in the backend
    }, 
    success:function(data){

      if(data.success){

        setTimeout(function() { 
          $('#modal').fadeOut('fast'); 
          location.reload(); 
        }, 2000); 
        $('.messages').append(data.success);

      } else {

        $('.messages').show(); 
        $('.messages').empty(); 
        $('.messages').append(data.error);

      }

      //console.log(data)
      //('#modal').hide(); // hide the modal after 2s  
    }
  }); 

});



// aJAX for the login page 
$(document).on('submit', '#login-form', function(e){

  // to prevent the page to reload
  e.preventDefault(); 

  $.ajax({

    type: 'POST', 
    url:'/accounts/login',
    data:{

      username:$('.user').val(), 
      password:$('.password').val(),
      csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() 

    // I will get messages in the backend
    }, 
    success:function(data){

      if(data.error){
        $('.messages').hide();  
        $('.messages').empty(); 
        $('.messages').append(data.error); 
        $('.messages').show();

      }else {
        setTimeout(function() {  
          $('#modal-login').fadeOut('fast');
          location.reload(); 
        }, 1000); 
        $('.messages').hide(); 

      }
    }
  }); 

})

我非常感谢你的帮助。我正在使用html表单学习这一点,因为我了解如何使它与ajax一起工作

我强烈建议您不要使用自己的注册/登录系统。这是一些已经解决的问题,可能会带来安全风险。我以前使用过django注册,它非常容易使用(),但django allauth似乎是目前的go-to包(h)

当你说django时,你使用模板吗?你的依赖关系是什么?版本等。Im使用django 2.2.2和python 3.7。表单是一种模式,因此除了我希望用户在登录后重定向到的仪表板之外,我没有使用任何模板。我将更新一个包含html的url。我没有使用模型,因为我使用的是用户模型,我想,我不确定这一点,但它似乎工作到目前为止,除了登录。
$(document).on('submit', '#register-form', function(e){

  // to prevent the page to reload
  e.preventDefault(); 

  $.ajax({

    type: 'POST', 
    url:'/accounts/register',
    data:{

      firstname:$('.name').val(), 
      surname:$('.surname').val(), 
      email:$('.email').val(),
      username:$('.user').val(), 
      password:$('.password').val(),
      confirm:$('.confirm').val(),
      csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() 

      // I will get messages in the backend
    }, 
    success:function(data){

      if(data.success){

        setTimeout(function() { 
          $('#modal').fadeOut('fast'); 
          location.reload(); 
        }, 2000); 
        $('.messages').append(data.success);

      } else {

        $('.messages').show(); 
        $('.messages').empty(); 
        $('.messages').append(data.error);

      }

      //console.log(data)
      //('#modal').hide(); // hide the modal after 2s  
    }
  }); 

});



// aJAX for the login page 
$(document).on('submit', '#login-form', function(e){

  // to prevent the page to reload
  e.preventDefault(); 

  $.ajax({

    type: 'POST', 
    url:'/accounts/login',
    data:{

      username:$('.user').val(), 
      password:$('.password').val(),
      csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() 

    // I will get messages in the backend
    }, 
    success:function(data){

      if(data.error){
        $('.messages').hide();  
        $('.messages').empty(); 
        $('.messages').append(data.error); 
        $('.messages').show();

      }else {
        setTimeout(function() {  
          $('#modal-login').fadeOut('fast');
          location.reload(); 
        }, 1000); 
        $('.messages').hide(); 

      }
    }
  }); 

})