@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')

Сессии тоже не работают
  • Вопрос задан
  • 132 просмотра
Решения вопроса 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 если требуется...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы