• 1403/10/01

مشکل CSRF TOKEN و انتقال بعد از درگاه پرداخت :

سلام وقت شما بخیر.

من از  local host استفاده می کنم.

بعد از پرداخت و انتقال به سمت سایت ارور CSRF TOKEN میگیرم.

لطفا راهنمایی بفرمایید چیکار کنم مشکل برطرف شه

و نمی خوام از @login_required  استفاده کنم

  • 1403/10/01
  • ساعت 13:04

سلام خدمت شما دوست عزیز

لطفا مقدار زیر رو پر کنین:

CSRF_TRUSTED_ORIGINS = []

این مقدار رو توی فایل settings.py قرار بدین و آدرس های دامنه رو داخلش به صورت لیست تعریف کنین


  • 1403/10/01
  • ساعت 13:33

استاد به این صورت منظورت هست؟

و بعد از  دیپلوی مشکلی برای پروژه پیش نمیاد؟

CSRF_TRUSTED_ORIGINS = ['localhost:8000']

یا منظورتون url برگشت به سایت بعد از پرداخت هستش؟


  • 1403/10/01
  • ساعت 13:49

نه دوست من داخلش باید آدرس url مربوط به دامنه ی سایت رو بذارین

زمانی که آنلاین کردین


  • 1403/10/01
  • ساعت 15:27

استاد عزیز مشکل همچنان پا برجاس.

و در بالا منظورم این دکوریتور بود @csrf_exempt

اشتباها نوشتم  @login_required  

در حال حاظر من روی لوکال هستم و روی لوکال احتیاج دارم این ارور برطرف شه؟

لطفا راهنمایی بفرمایید سپاس .


  • 1403/10/01
  • ساعت 15:48

ببینین زمانی که از درگاه برمیگردین، این درخواست به صورت POST توسط ارائه دهنده ی درگاه ارسال میشه

به صورت پیشفرض ساختار csrf توی head درخواست در جنگو تنظیم میشه

2 روش برای حل این مورد وجود داره

یا باید نوع بازگشت از درگاه رو از روی POST به GET تغییر بدین که عملا گاها با خطا مواجه میشه و مشکلات امنیتی داره

یا اینکه از دکوریتور csrf_exempt استفاده کنین


  • 1403/10/01
  • ساعت 15:55

استاد من از این دکوریتور csrf_exempt استفاده میکنم زمان برگشت به سایت کاربر لاگین نیست

و این ارور رو میده


  • 1403/10/01
  • ساعت 15:57

چه درگاهی رو دارین پیاده سازی میکنین؟


  • 1403/10/01
  • ساعت 15:59

استاد درگاه آقای پرداخت رو دارم استفاده میکنم


  • 1403/10/01
  • ساعت 16:01

  • 1403/10/01
  • ساعت 16:02

ببینین چون درخواست از نوع post هستش و این درخواست رو سایت آقای درگاه داره ارسال میکنه پس کوکی مربوط به کاربر شما باهاش ارسال نمیشه

برای این مورد معمولا درگاه های پرداخت یک اطلاعات اضافی رو توی درخواست اولیه از شما میگیرن ( منظورم درخواست اولی هستش که به درگاه ارسال میکنین و بعد کاربر رو به سایت درگاه redirect میکنین )

توی این اطلاعات، مقدار id مربوط به order ای که قصد دارین خریدش رو نهایی کنین ارسال کنین

بعد از بازگشت از درگاه ، این اطلاعات توسط درگاه برای شما ارسال میشه و میتونین بفهمین که کدوم order باید نهایی بشه


  • 1403/10/01
  • ساعت 16:16

استاد زمان ارسال اطلاعات فقط transid ارسال میکنه به درگاه پرداخت.

api در گاه پرداخت:

https://aqayepardakht.ir/api/


  • 1403/10/01
  • ساعت 16:24

ببینین توی داکیومنت گفته شما میتونین مقدار invoice_id رو ارسال کنین

منظور از invoice_id همون شماره ی order یا order id هستش

اگر دقت کنین توی مرحله ی سوم گفته اگر شما invoice_id رو پر کرده باشین براتون مجدد ارسال میشه

فقط توجه داشته باشین که اطلاعات توی resquest.data یا request.post هستش و هر دو رو چک کنین


  • 1403/10/01
  • ساعت 16:47

استاد عزیز لاگین شدن و یوزر آی دی کاربر رو چیکارکنم؟


  • 1403/10/01
  • ساعت 16:56

  • 1403/10/01
  • ساعت 19:50

استاد مجبور شدم کد رو به اینصورت تغییر بدم.

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()

بجای ای دی خرید ای دی کاربر رو انتقال دادم و بعد از پرداخت دوباره اتومات لاگینش کردم


  • 1403/10/01
  • ساعت 19:51

بنظر شما روی امنیت و سرعت سایت ثاثیر داره؟


logo-samandehi