سلام وقت شما بخیر.
من از local host استفاده می کنم.
بعد از پرداخت و انتقال به سمت سایت ارور CSRF TOKEN میگیرم.
لطفا راهنمایی بفرمایید چیکار کنم مشکل برطرف شه
و نمی خوام از @login_required استفاده کنم
سلام خدمت شما دوست عزیز
لطفا مقدار زیر رو پر کنین:
CSRF_TRUSTED_ORIGINS = []
این مقدار رو توی فایل settings.py قرار بدین و آدرس های دامنه رو داخلش به صورت لیست تعریف کنین
استاد به این صورت منظورت هست؟
و بعد از دیپلوی مشکلی برای پروژه پیش نمیاد؟
CSRF_TRUSTED_ORIGINS = ['localhost:8000']
یا منظورتون url برگشت به سایت بعد از پرداخت هستش؟
نه دوست من داخلش باید آدرس url مربوط به دامنه ی سایت رو بذارین
زمانی که آنلاین کردین
استاد عزیز مشکل همچنان پا برجاس.
و در بالا منظورم این دکوریتور بود @csrf_exempt
اشتباها نوشتم @login_required
در حال حاظر من روی لوکال هستم و روی لوکال احتیاج دارم این ارور برطرف شه؟
لطفا راهنمایی بفرمایید سپاس .
ببینین زمانی که از درگاه برمیگردین، این درخواست به صورت POST توسط ارائه دهنده ی درگاه ارسال میشه
به صورت پیشفرض ساختار csrf توی head درخواست در جنگو تنظیم میشه
2 روش برای حل این مورد وجود داره
یا باید نوع بازگشت از درگاه رو از روی POST به GET تغییر بدین که عملا گاها با خطا مواجه میشه و مشکلات امنیتی داره
یا اینکه از دکوریتور csrf_exempt استفاده کنین
استاد من از این دکوریتور csrf_exempt استفاده میکنم زمان برگشت به سایت کاربر لاگین نیست
و این ارور رو میده
چه درگاهی رو دارین پیاده سازی میکنین؟
استاد درگاه آقای پرداخت رو دارم استفاده میکنم
ببینین چون درخواست از نوع post هستش و این درخواست رو سایت آقای درگاه داره ارسال میکنه پس کوکی مربوط به کاربر شما باهاش ارسال نمیشه
برای این مورد معمولا درگاه های پرداخت یک اطلاعات اضافی رو توی درخواست اولیه از شما میگیرن ( منظورم درخواست اولی هستش که به درگاه ارسال میکنین و بعد کاربر رو به سایت درگاه redirect میکنین )
توی این اطلاعات، مقدار id مربوط به order ای که قصد دارین خریدش رو نهایی کنین ارسال کنین
بعد از بازگشت از درگاه ، این اطلاعات توسط درگاه برای شما ارسال میشه و میتونین بفهمین که کدوم order باید نهایی بشه
استاد زمان ارسال اطلاعات فقط transid ارسال میکنه به درگاه پرداخت.
api در گاه پرداخت:
https://aqayepardakht.ir/api/
ببینین توی داکیومنت گفته شما میتونین مقدار invoice_id رو ارسال کنین
منظور از invoice_id همون شماره ی order یا order id هستش
اگر دقت کنین توی مرحله ی سوم گفته اگر شما invoice_id رو پر کرده باشین براتون مجدد ارسال میشه
فقط توجه داشته باشین که اطلاعات توی resquest.data یا request.post هستش و هر دو رو چک کنین
استاد عزیز لاگین شدن و یوزر آی دی کاربر رو چیکارکنم؟
استاد مجبور شدم کد رو به اینصورت تغییر بدم.
user_id = request.POST.get('invoice_id')
user: User = User.objects.filter(id=user_id).first()
login(request, user)
print(request.user)
print(request.POST.get('transid'))
current_order, created = Order.objects.get_or_create(is_paid=False, user_id=user_id)
total_amount = current_order.get_total_amount()
بجای ای دی خرید ای دی کاربر رو انتقال دادم و بعد از پرداخت دوباره اتومات لاگینش کردم
بنظر شما روی امنیت و سرعت سایت ثاثیر داره؟