Please Help me, I am stuck With this Error

I am new to Django, I got this ‘AnonymousUser’ error.

Request Method: POST
Request URL: https://myapp.in/payments/callback/
Django Version: 4.2.3
Exception Type: AttributeError
Exception Value: ‘AnonymousUser’ object has no attribute ‘type’
Exception Location: /home/okuser/virtualenv/una_app/3.9/lib/python3.9/site-packages/django/utils/functional.py, line 268, in inner
Raised during: payments.views.callback
Python Executable: /home/ okuser /virtualenv/una_app/3.9/bin/python
Python Version: 3.9.16
Python Path: [‘’, ‘/home/okuser/una_app’,

‘/opt/alt/python39/lib64/python39.zip’, ‘/opt/alt/python39/lib64/python3.9’, ‘/opt/alt/python39/lib64/python3.9/lib-dynload’, ‘/home/okuser/virtualenv/una_app/3.9/lib64/python3.9/site-packages’,

‘/home/okuser/virtualenv/una_app/3.9/lib/python3.9/site-packages’]|
|Server time:|Thu, 24 Aug 2023 08:09:19 +0530|

my accounts/views.py



def SignUpView(request, slug):
    # logout(request)
    member_type = MembershipType.objects.get(slug=slug)
    user_type = member_type.slug
    price = member_type.price

    # Student function
    if  slug == 'student':
        if request.method == 'POST':
            student_user_form = StudentForm(request.POST)
            student_add_form = StudentAddForm(request.POST, request.FILES)
            if student_user_form.is_valid() and student_add_form.is_valid():
                user_obj = student_user_form.save(commit=False)
                user_obj.set_password(user_obj.password)
                user_obj.is_student = True
                user_obj.type = slug
                user_obj.save()

                student = student_add_form.save(commit=False)
                student.user = user_obj
                student.save()

                login(request,user_obj)
                return redirect('payment-page', slug=slug)
            else:
                print(student_user_form.errors)
                print(student_add_form.errors)
        else:
            student_user_form = StudentForm()
            student_add_form = StudentAddForm()

        context = {
                    'user_form':student_user_form,
                    'add_form':student_add_form,
                    'user_type':user_type,
                    'student':'student',
                    'price':price,
                    'slug': slug,
                }

        return render(request, 'registration/student_form.html', context)
    

    elif  slug == 'other':
        if request.method == 'POST':
            other_user_form = OtherForm(request.POST)
            other_add_form = OtherAddForm(request.POST, request.FILES)
            if other_user_form.is_valid() and other_add_form.is_valid():
                user_obj = other_user_form.save(commit=False)
                user_obj.set_password(user_obj.password)
                user_obj.is_others = True
                user_obj.type = slug
                user_obj.save()

                other = other_add_form.save(commit=False)
                other.user = user_obj
                other.save()

                login(request,user_obj)
                return redirect('payment-page', slug=slug)
            else:
                print(other_user_form.errors)
                print(other_add_form.errors)
        else:
            other_user_form = OtherForm()
            other_add_form = OtherAddForm()

        context = {
                    'user_form':other_user_form,
                    'add_form':other_add_form,
                    'user_type':user_type,
                    'price':price ,
                    'slug':slug ,
                    'other':'other',

                }

        return render(request, 'registration/nurse_form.html', context)
    

    elif  slug == 'faculty':

        if request.method == 'POST':
            faculty_user_form = FacultyForm(request.POST)
            faculty_add_form = FacultyAddForm(request.POST, request.FILES)
           
            if faculty_user_form.is_valid() and faculty_add_form.is_valid():
                user_obj = faculty_user_form.save(commit=False)
                user_obj.set_password(user_obj.password)
                user_obj.is_faculty = True
                user_obj.type = slug
                user_obj.save()

                faculty = faculty_add_form.save(commit=False)
                faculty.user = user_obj
                faculty.save()

                login(request,user_obj)
                return redirect('payment-page', slug=slug)
            
            else:
                pass

        else:
            faculty_user_form = FacultyForm()
            faculty_add_form = FacultyAddForm()

        context = {
                    'user_form':faculty_user_form,
                    'add_form':faculty_add_form,
                    'user_type':user_type,
                    'price':price,
                    'slug':slug,
                }

        return render(request, 'registration/nurse_form.html', context)


    else:

        if request.method == 'POST':
            nurse_user_form = NurseForm(request.POST)
            nurse_add_form = NurseAddForm(request.POST, request.FILES)
            if nurse_user_form.is_valid() and nurse_add_form.is_valid():
                
                user_obj = nurse_user_form.save(commit=False)
                user_obj.set_password(user_obj.password)
                user_obj.is_nurse = True
                user_obj.type = slug
                user_obj.save()

                nurse = nurse_add_form.save(commit=False)
                nurse.user = user_obj
                nurse.save()
                login(request,user_obj)
                return redirect('payment-page', slug=slug)

            else:
                print(nurse_user_form.errors)
                print(nurse_add_form.errors)

                
        else:
            nurse_user_form = NurseForm()
            nurse_add_form = NurseAddForm()


        context = {
                    "user_type":    user_type, 
                    "price":        price,
                    "user_form":    nurse_user_form,
                    "add_form":     nurse_add_form
                }
        
        return render(request, 'registration/nurse_form.html', context)

My payments/views.py

from django.shortcuts import redirect, render
from django.conf import settings
from django.urls import reverse
from django.views.decorators.csrf import csrf_exempt
from accounts.models import MembershipType
from .models import Payment
from django.contrib.auth import get_user_model
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.contrib import messages
from django.contrib.auth.decorators import login_required

from django.db import transaction

from django.template.loader import get_template
from django.core.mail import EmailMultiAlternatives
import json
import razorpay

from accounts.models import Nurse,Student,Faculty,Other
User = get_user_model()

razorpay_client = razorpay.Client(auth=(settings.RAZOR_KEY_ID, settings.RAZOR_KEY_SECRET))



def selectMemberType(slug,user):
    if slug == 'nurse':
        return Nurse.objects.get(user=user)
    elif slug == 'student':
        return Student.objects.get(user=user)
    elif slug == 'faculty':
        return Faculty.objects.get(user=user)
    elif slug == 'other':
        return Other.objects.get(user=user)
    


@login_required
def payment_page(request, slug):
    try:
        member_type = get_object_or_404(MembershipType, slug=slug)
        amount = member_type.price
        currency = 'INR'
        product_name = str(slug).capitalize()

        if request.user.is_anonymous:
            messages.error(request, "Welcome to UNA Community!")
            return redirect('login')

        user_obj = request.user 
        razorpay_order = razorpay_client.order.create(dict(
            amount=amount * 100,
            currency=currency,
            payment_capture='0'
        ))

        razorpay_order_id = razorpay_order['id']
        profile_obj = selectMemberType(slug, request.user) 
        full_path = settings.SITE_URL + '/payments/payment-handler/'
        context = {
            'razorpay_order_id': razorpay_order_id,
            'razorpay_merchant_key': settings.RAZOR_KEY_ID,
            'razorpay_name': product_name,
            'razorpay_amount': amount * 100,
            'currency': currency,
            'email': user_obj.email,
            'phone': profile_obj.mobile,
            'url_path': full_path,
            "callback_url": settings.SITE_URL + "/payments/callback/"
        }

        payment = Payment.objects.create(
            payment_order_id=razorpay_order_id,
            amount=amount,
            user=user_obj,
            name=product_name,
        )
        payment.save()

        return render(request, 'payment-page.html', context)

    except Exception as e:
        # Handle exceptions here, log them, and return an appropriate response.
        # You can customize this based on the specific exceptions you expect.
    
        context = {
            'error_message' : str(e),
            'slug':slug,
        }

        # return render(request, 'payment_failure.html', context)
        return render(request, 'something_wrong.html', context)





@csrf_exempt
def callback(request):

    def verify_signature(response_data):
        client = razorpay.Client(auth=(settings.RAZOR_KEY_ID, settings.RAZOR_KEY_SECRET))
        return client.utility.verify_payment_signature(response_data)
        
    try:
        if "razorpay_signature" in request.POST:
            payment_id = request.POST.get("razorpay_payment_id", "")
            provider_order_id = request.POST.get("razorpay_order_id", "")
            signature_id = request.POST.get("razorpay_signature", "")

            payment = Payment.objects.get(payment_order_id=provider_order_id)
            payment.payment_id = payment_id
            payment.signature_id = signature_id
            payment.save()

            if verify_signature(request.POST):
                payment.status = True
                payment.save()
                user = request.user
                user.is_paid = True
                profile = selectMemberType(user.type, user)
                profile.is_paid = True
                user.save()
                profile.save()

                try:
                    # email section
                    def send_email():
                        html_template = get_template('email_temp.html')
                        context = {'profile': profile, 'user': user}
                        subject, from_email, to = 'UNA Membership Confirmation', settings.EMAIL_HOST_USER, user.email
                        html_content = html_template.render(context)
                        text_content = F"You are successfully registered as {user.type}"
                        msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
                        msg.attach_alternative(html_content, "text/html")
                        msg.send()
                    transaction.on_commit(send_email)

                    profile.mail_sent = True
                    profile.save()

                except Exception as e:
                    print(e)


                profile_url = reverse('profile', kwargs={'user_id': user.id})
                messages.success(request, "Welcome to Community!")
                return redirect(profile_url)
                
            else:
                payment.status = False
                payment.save()
                error_message = "Payment verification failed. Please try again."

                user = request.user
# 
                context = {
                    'error_message' : error_message,
                    'type':user.type,
                }
                return render(request, 'something_wrong.html', context)
            

        else:
            # Handle error case where 'razorpay_signature' is not in request.POST
            error_metadata = json.loads(request.POST.get("error[metadata]"))
            payment_id = error_metadata.get("payment_id")
            provider_order_id = error_metadata.get("order_id")
            payment = Payment.objects.get(payment_order_id=provider_order_id)
            payment.payment_id = payment_id
            payment.status = False
            payment.save()

            # Additional error handling logic here

            error_metadata_str = json.dumps(error_metadata) 
            # return redirect('error_view', error_message=error_metadata_str)
            context = {
                'error_message' : error_metadata_str,
                'type':user.type,
                }
            return render(request, 'something_wrong.html', context) 
            

    except Payment.DoesNotExist:
        error_message = 'failed'
        # return redirect('error_view', error_message=error_message)
        user = request.user
        context = {
                'error_message' : error_message,
                'type':user.type,
                }
        return render(request, 'something_wrong.html', context)
    
    
    except Exception as e:
        error_message = str(e)
        # messages.error(request, f"An error occurred: {str(e)}")
        # return redirect('error_view', error_message=error_message)
        user = request.user
        context = {
                'error_message' : error_message,
                'type':user.type,
                }
        
        return render(request, 'something_wrong.html', context)  
    



def error_view(request):
    # context = {'error_message': error_message}
    return render(request, "something_wrong.html" )

def failed_view(request):
    # context = {'error_message': error_message}
    return render(request, "payment_failure.html" )



please help me to fix this, thanks

Is callback a view that is being called by a payment processor? If so, that request is not going to be associated with a user - it doesn’t make any sense to try and access request.user in that view?