アプリでページ遷移がうまくできない

実現したいこと

・アプリにログイン後、セッションを保持したい

前提

・Mac OSを利用
・Djangoで掲示板アプリを作成
・HEROKUにデプロイ済
・DBはHerokuPosgresを使用
・sessionはDBで管理し、値は取れている状態
・当該掲示板はログイン機能を実装しており、登録情報はDBで保持
・ログイン後は専用ページに遷移させる
・掲示板の新規作成はログイン済ユーザしかできない

発生している問題

ログイン済みのユーザはTOPページの固定ナビゲーションを変化させるようにしているが、
ページを遷移する際、またはF5などでページ更新する際にナビゲーションが未ログイン状態のものになってしまう。(毎回必ず発生するわけではなく、ランダムなように感じます。)

settings.py

INSTALLED_APPS = [ 'accounts', 'board', 'whitenoise.runserver_nostatic', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', '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', ]

views.py

from django.shortcuts import render, redirect from . import forms from django.core.exceptions import ValidationError from .models import UserActiveTokens from django.contrib.auth import authenticate, login, logout from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.auth import update_session_auth_hash def home(request): return render( request, 'accounts/home.html' ) def registration(request): registration_form = forms.RegistrationForm(request.POST or None) if registration_form.is_valid(): try: registration_form.save() return redirect('accounts:home') except ValidationError as e: registration_form.add_error('password', e) return render( request, 'accounts/registration.html', context={ 'registration_form':registration_form, } ) def active_user(request, token): user_active_token = UserActiveTokens.objects.active_user_using_token(token) return render( request, 'accounts/active_user.html' ) def login_page(request): login_form = forms.LoginForm(request.POST or None) if login_form.is_valid(): email = login_form.cleaned_data.get('email') password = login_form.cleaned_data.get('password') r_user = authenticate(email=email, password=password) if r_user: if r_user.is_active: login(request,r_user) messages.success(request, 'ログインに成功しました') return redirect('accounts:home') else: messages.warning(request, 'user is not valid') else: messages.warning(request, 'メールアドレスまたはパスワードが違います') return render( request, 'accounts/login_page.html', context={ 'login_form':login_form, } ) @login_required def logout_page(request): logout(request) messages.success(request, 'ログアウトしました') return redirect('accounts:home') @login_required def edit_page(request): edit_form = forms.UserEditForm( request.POST or None, request.FILES or None, instance = request.user ) if edit_form.is_valid(): messages.success(request, '更新されました') edit_form.save() return render(request, 'accounts/edit_page.html', context={ 'edit_form': edit_form, }) @login_required def change_password(request): change_password_form = forms.ChangePasswordForm(request.POST or None, instance=request.user) if change_password_form.is_valid(): try: change_password_form.save() messages.success(request, 'パスワードが更新されました') update_session_auth_hash(request, request.user) except ValidationError as e: change_password_form.add_error('password', e) return render( request, 'accounts/change_password.html', context={ 'change_password_form': change_password_form, } ) def error_page(request, exception): return render( request, '404.html' )

試したこと

DB上にはセッション情報は登録されていて、ログアウトするとそのセッション情報が消えていることも確認しました。

reqirements.txt

asgiref==3.6.0 attrs==23.1.0 autopep8==2.0.2 beautifulsoup4==4.12.2 bottle==0.12.25 boxsdk==3.7.2 branca==0.6.0 certifi==2022.12.7 charset-normalizer==3.1.0 click==8.1.3 colorama==0.4.6 contourpy==1.0.7 cycler==0.11.0 distlib==0.3.6 dj-database-url==2.0.0 Django==4.2.2 django-debug-toolbar==4.0.0 django-environ==0.10.0 django-heroku==0.3.1 django-on-heroku==1.1.2 environ==1.0 et-xmlfile==1.1.0 filelock==3.12.0 folium==0.14.0 fonttools==4.39.3 gunicorn==20.1.0 idna==3.4 japanize-matplotlib==1.1.3 Jinja2==3.1.2 joblib==1.2.0 kiwisolver==1.4.4 MarkupSafe==2.1.2 matplotlib==3.7.1 numpy==1.24.2 openpyxl==3.1.2 packaging==23.1 pandas==2.0.0 Pillow==9.5.0 platformdirs==3.5.0 psycopg2==2.9.6 psycopg2-binary==2.9.6 pycodestyle==2.10.0 pygame==2.4.0 pyparsing==3.0.9 python-dateutil==2.8.2 pytz==2023.3 regex==2023.6.3 requests==2.28.2 requests-toolbelt==1.0.0 ruby==0.0.2 scikit-learn==1.2.2 scipy==1.10.1 six==1.16.0 soupsieve==2.4.1 sqlparse==0.4.4 threadpoolctl==3.1.0 tomli==2.0.1 tqdm==4.65.0 typing_extensions==4.6.2 tzdata==2023.3 urllib3==1.26.15 virtualenv==20.23.0 virtualenvwrapper-win==1.2.7 whitenoise==6.5.0 wikipedia==1.4.0 xlrd==2.0.1 xlwt==1.3.0

コメントを投稿

0 コメント