Search code examples
djangodjango-authentication

Django 2 Login Registration


I'm Prety new in Django. After a few google search, I find full CRUD and I know how to handle that. But in User registration, I fell some problem all over the online every one uses Form.py to handle registration form but I don't want to use Form.py I like to customize it.

but the problem is when I use auth for login then Django auth says it's a wrong password

I use

authenticate(email=email,password=password)

for login check

Is anyone please explain custom login registration without using Form.py with some example.

Here is my View.py Code

def loginCheck(request):
    if request.method == 'POST':
        username = request.POST.get('username'),
        password = request.POST.get('password'),
        user = authenticate(request, username=username, password=password)

        if user is not None:

            return HttpResponse('Find User')
        else:
            return HttpResponse("Not Find User")

and my User Registration Code

def registration(request):
    checkData = AuthUser.objects.filter(email=request.POST.get('email'))
    if not checkData:
        User.objects.create_user(
            username=request.POST.get('username'),
            email=request.POST.get('email'),
            password=(request.POST.get('password')),
        )
        messages.add_message(request, messages.INFO, 'User Saved Successfully')
        return redirect('loginView')
    else:
        messages.add_message(request, messages.INFO, 'Email Already Exists')
        return redirect('loginView')

My Login code return Not Find User.


Solution

  • Try this minimal example. In this, you can create User and log in through API.

    import json
    from django.views.generic import View
    from django.contrib.auth.models import User
    from django.http import JsonResponse
    from django.contrib.auth import authenticate, login
    
    
    class UserRegisterView(View):
        def get(self, request):
            return JsonResponse({"message": "METHOD NOT ALLOWED"})
    
        def post(self, request, *args, **kwargs):
            json_body = json.loads(request.body)
            username = json_body.get('username')
            password = json_body.get('password')
            email = json_body.get('email')
            is_staff = json_body.get('is_staff', False)
            is_superuser = json_body.get('is_superuser', False)
            User.objects.create_user(
                username=username, email=email,
                password=password, is_staff=is_staff,
                is_superuser=is_superuser
            )
            return JsonResponse({"message": "User created"})
    
    
    class LoginView(View):
        def get(self, request):
            return JsonResponse({"message": "METHOD NOT ALLOWED"})
    
        def post(self, request, *args, **kwargs):
            '''
            input data format:
    
            {
            "username" : "my username",
            "password":"mysecret123@"
            }
    
            '''
            json_body = json.loads(request.body)
            username = json_body.get('username')
            password = json_body.get('password')
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return JsonResponse({"message": "login success"})
            else:
                return JsonResponse({"message": "login failed"})
    



    Why I parsed request.body ?
    How to receive json data using HTTP POST request in DJANGO

    Reference:
    How to authenticate user in DJANGO (official-doc)

    UPDAYE-1
    updated view as per the request,checking sufficent data in POST method (bold code)

    def loginCheck(request):
        if request.method == 'POST' and 'username' in request.POST and 'password' in request.POST:
            username = request.POST.get('username'),
            password = request.POST.get('password'),
            user = authenticate(request, username=username, password=password)
    
            if user is not None:
    
                return HttpResponse('Find User')
            else:
                return HttpResponse("Not Find User")
        return HttpResponse("POST data wrong")