@Jomm

Почему request.user равен AnonymousUser?

Я реализовал оплату на сайте с помощью одной платежной системы, которaя при удачной оплате редиректит на страницу методом POST. Я попытался конкретному пользователю в дб кое-что изменить но ничего не выходит
@csrf_exempt
def aaa(request):
	if request.method == 'POST':
		user = request.user
		user.username = request.POST['username']
		user.save()
	return render(request, 'main/aaa.html')

Сессии тоже не работают
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Если посмотрите у себя в settings.MIDDLEWARE,
то увидите к примеру django.contrib.sessions.middleware.SessionMiddleware
которая берет из кук сессионную куку, и добавляет данные сессии к запросу:

session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME)
        request.session = self.SessionStore(session_key)


а затем там же django.contrib.auth.middleware.AuthenticationMiddleware, в котором если покопаться - то можно найти как получается пользователь из сессии, которую мы добавили к запросу в предыдущем middleware. Я просто не буду перечислять все шаги - иначе это будет тема отдельного длинного поста.
Просто походите по MIDDLEWARE и AUTHENTICATION_BACKENDS - да посмотрите что откуда берется. У вас может быть некий свой набор...
Поэтому если у вас в куке не прилетел параметр сессионной куки - тупо в request.COOKIES нет параметра settings.SESSION_COOKIE_NAME который по дефолту называется sessionid- то и пользователю взяться неоткуда.
Поэтому копайте точнее что там вам прилетает. Если возможности сохранять сессионную куку нет - то можно к примеру в урл редиректа добавлять некий хеш, по которому можно получать пользователя, написав свой middleware если требуется...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы