【发布时间】:2020-05-15 15:06:29
【问题描述】:
我被困在 django 中,如果有人可以帮助我,我将不胜感激。
我需要有一个第 3 方 API 的入口点。所以我创建了一个视图并用@csrf_exempt 装饰它
现在的问题是我无法访问我之前设置的任何会话变量。 edit - 我设置了多个会话变量,例如用户电子邮件,以了解用户是否已经登录。我能够在调用 3rd 方 API 之前使用会话。当第 3 方 API 发送响应时,他们不会发送 CSRF 令牌,因此我已将该视图从 csrf 中排除。一旦我收到有效的回复,我想更新我的数据库。为此,我需要知道我丢失的用户的电子邮件 ID,因为我不再有会话变量。
ppConfirmPaymentProcess 是另一个处理此第 3 方 API 发送的 POST 数据的函数。
一切正常,csrf_exempt 也正常,但我不能用这个请求做request.session["foo"]。有人可以帮忙吗?
@csrf_exempt
def ppConfirmPayment(request):
print(request.session, "=======================================")
for key, value in request.session.items():
print('{} => {}'.format(key, value))
return ppConfirmPaymentProcess(request)
【问题讨论】:
-
现在的问题是我无法访问我之前设置的任何会话变量。你是怎么做到的?
-
API 调用者是否注意为其所有调用发送相同的
sessionidcookie?如果不是,那么 Django 会将每个调用视为一个新会话。 -
"我之前设置的变量。" ... 设置在 where 之前?在你的会话中?还是 API 用户?
-
我有多个会话变量来检查用户是否登录。例如request.session["user_email"]=abc@gmail.com
-
您的 API 入口点是 webhook 接收器吗?在这种情况下,API 调用将直接来自您的支付提供商,而不是您的客户,因此您将无法访问客户的会话。当您创建付款请求时,付款提供商会为您提供一个 ID,将其与您需要的任何其他信息一起存储在数据库中,并使用该 ID 进行关联。
标签: python django django-csrf