Django “Remember Me” with built-in login view and authentication form

后端 未结 3 821
别那么骄傲
别那么骄傲 2020-12-12 13:21

How can I reuse the original admin login() and AuthenticationForm to set longer cookie length for users with \"remember me\" option checked at login page? I am currently usi

3条回答
  •  孤城傲影
    2020-12-12 13:40

    Dependencies

    from django.shortcuts import render
    from django.http import JsonResponse
    from django.views.decorators.csrf import csrf_exempt
    from django.contrib.auth import authenticate
    from site_user.models import User
    

    This code will revoke username and password from session when we are at login page

    def home(request):
        if request.session.has_key('username') and request.session.has_key('password'):
            username = request.session['username']
            password = request.session['password']
            context_dict = {'username': username, 'password': password}
            return render(request, 'sadmin/login.html', context=context_dict)
        else:
            context_dict = {'username': '', 'password': ''}
            return render(request, 'sadmin/login.html', context=context_dict)
    

    The following code is used for user authentication. Here 'is_remember_check' checkbox field from HTML file

    @csrf_exempt
    def login(request):
        if request.method == "POST":
            if request.POST['is_remember_check'] == 'true':
                request.session['username'] = request.POST['username']
                request.session['password'] = request.POST['password']
    
            user = authenticate(username=request.POST['username'], password=request.POST['password'])
    
            if user is not None:
                return JsonResponse({'result': request.POST, 'status': True})
            else:
                return JsonResponse({'result': request.POST, 'status': False})
    

    AJAX call from login page

    function login(){
        remember_checkbox_value = document.getElementsByName('remember')[0].checked;
        username = document.getElementsByName('username')[0].value;
        password = document.getElementsByName('password')[0].value;
        var post_data = {username:username, password:password, is_remember_check:remember_checkbox_value};
    
        $.ajax({
                    url: '/sadmin/login/',
                    method: 'POST',
                    data: post_data,
                    dataType: 'json',
                    success: function (response) {
                            if (response.status){
                            alert("User login is successful");
                            window.location.reload();
                            }
                            else{
                            alert("User login is not successful");
                            window.location.reload();
                            }
                    }
            });
    }
    

    HTML Code

提交回复
热议问题