Мой путь URL в проекте url.py
определяется следующим образом:
path('endpoint/', views.Endpoint.as_view(), name='get_endpoint'),
views.py
включает следующий класс для обработки этой маршрутизации:
@method_decorator(csrf_exempt, name='dispatch')
class Endpoint(View):
def get(self, request, *args, **kwargs):
############ Here I can see the User Session ##########
if not request.user.is_authenticated:
return redirect('authentication_router')
return redirect(
'https://app.globus.org/file-manager?method=POST&action=%s&cancelurl=%s&folderlimit=1&filelimit=0&label=%s'
% (
request.build_absolute_uri(), "/", "To Transfer your Files Select the Folder first!")
)
def post(self, request, *args, **kwargs): # On return from OAuth Page
############ Here, User Session return nothing so user is AnonymousUser ##########
if request.POST.get('folder[0]'): # A Endpoint folder was selected
endpoint_path = os.path.join(request.POST.get('path'), request.POST.get('folder[0]'))
else:
endpoint_path = request.POST.get('path')
profile = request.user.userprofile # request.user does not has userprofile
profile.endpoint_path = endpoint_path
profile.save()
return HttpResponseRedirect(reverse('authentication_router'))
Проблема заключается в когда вызывается get, он находит значение request.user как аутентифицированного пользователя, но как только перенаправление со страницы OAUTH с POST достигает класса, он теряет весь пользовательский сеанс запроса и выдает ошибку в этой строке:
profile = request.user.userprofile
As , request.user
кажется потерянным в своем сеансе и имеет значение AnonymousUser
, хотя до GET
метода он сохраняет значения сеанса входа пользователя.
Мой settings.py
файл включает в себя:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
**'django.contrib.sessions',**
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'myapp',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
**'django.contrib.auth.middleware.AuthenticationMiddleware',**
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Я тестирую его на localhost: 8000. Пожалуйста, дайте мне знать, что мне не хватает этого кода. Тот же код отлично работает в Django 1.8 и Python 2.7. В последнее время я пытаюсь обновить его для работы с Django 3 и Python 3. Единственное отличие, которое я вижу, в settings.py
в Django 1.8 версии включает в себя: 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
в MIDDLEWARE_CLASSES
, который удален в последняя версия Django.