前提・実現したいこと
dj-rest-authでユーザー登録をした後、登録したメールアドレスに確認用のメールが届きます。
そのメールにurlが表示されていて、そのurlを押すとアカウントの確認が完了するという仕組みです。
発生している問題・エラーメッセージ
メールに表示されているurlが正しくないせいで正しくアカウントの確認ができません。
具体的にはlocalhostの後にポート番号が入っていません。
表示して欲しいurl http://localhost:8080/dj-rest-auth/registration/account-confirm-email/NQ:1lNX7f:wOIwQ_ZHK2rvrfPSvAeOQy1MFFbzRYVLowvDtdaO3d8/ 実際に表示されているurl http://localhost/dj-rest-auth/registration/account-confirm-email/NQ:1lNX7f:wOIwQ_ZHK2rvrfPSvAeOQy1MFFbzRYVLowvDtdaO3d8/
ファイルの構造
ファイルの構造はこんな感じです
project |-backend | |-nginx | | |-default.dev.conf | | |-Dockerfile.dev | |-web_back | | |-accounts(app) | | |-apiv1(app) | | |-config(project) | | |-Dockerfile | | |-requirements.txt |-frontend | |-nginx | | |-default.dev.conf | | |-Dockerfile.dev | | |-wait.sh | |-web_front | | |-reactに関するファイル色々 |-mysql | |-Dockerfile | |-my.cnf |-sql |-docker-compose.yml
###該当のソースコード
関係ありそうなコードのみ載せます
nginx
1### backend/nginx/default.dev.conf 2upstream django { 3 server web-back:8000; 4} 5 6server { 7 8 listen 80; 9 10 location = /healthz { 11 return 200; 12 } 13 14 location / { 15 proxy_pass http://django; 16 proxy_set_header Host $host; 17 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 18 proxy_redirect off; 19 } 20 21 location /static/ { 22 alias /hang_out/staticfiles/; 23 } 24}
python
1### backend/web_back/config/settings.py(一部のみ) 2# 認証の設定 3SITE_ID = 1 4ACCOUNT_AUTHENTICATION_METHOD = 'email' 5ACCOUNT_USERNAME_REQUIRED = False 6ACCOUNT_EMAIL_REQUIRED = True 7ACCOUNT_UNIQUE_EMAIL = True 8ACCOUNT_EMAIL_VERIFICATION = 'mandatory' 9ACCOUNT_CONFIRM_EMAIL_ON_GET = True 10AUTHENTICATION_BACKENDS = [ 11 'allauth.account.auth_backends.AuthenticationBackend', 12 'django.contrib.auth.backends.ModelBackend', 13] 14LOGIN_URL = 'http://localhost:8080/dj-rest-auth/login' 15 16# JWTの設定。あとで期限切れのトークンが自動的に削除されるようにする 17REST_USE_JWT = True 18JWT_AUTH_COOKIE = 'project-access' 19JWT_AUTH_REFRESH_COOKIE = 'project-refresh' 20key = RSA.generate(2048) 21PRIVATE_KEY = key.export_key() 22PUBLIC_KEY = key.publickey().export_key() 23SIMPLE_JWT = { 24 'AUTH_HEADER_TYPES': ('JWT',), 25 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=3), 26 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), 27 'ROTATE_REFRESH_TOKENS': True, 28 'BLACKLIST_AFTER_ROTATION': True, 29 'ALGORITHM': 'RS256', 30 'SIGNING_KEY': PRIVATE_KEY, 31 'VERIFYING_KEY': PUBLIC_KEY, 32} 33REST_FRAMEWORK = { 34 'DEFAULT_AUTHENTICATION_CLASSES': [ 35 'dj_rest_auth.jwt_auth.JWTCookieAuthentication', 36 ], 37} 38 39# eメールバックエンドの設定。本番環境に移す時にSendGridに移行する 40EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 41EMAIL_HOST = 'smtp.gmail.com' 42EMAIL_USE_TLS = True 43EMAIL_PORT = 587 44EMAIL_HOST_USER = '自分のメアド' 45EMAIL_HOST_PASSWORD = 'そのパスワード' 46
python
1### backend/web_back/config/urls.py 2from django.contrib import admin 3from django.urls import path, include, re_path 4from django.views.generic import RedirectView 5from dj_rest_auth.registration.views import VerifyEmailView, ConfirmEmailView 6 7urlpatterns = [ 8 path('admin/', admin.site.urls), 9 path('accounts/', include('accounts.urls')), 10 path('api/v1/', include('apiv1.urls')), 11 path('dj-rest-auth/registration/account-confirm-email/<str:key>/', ConfirmEmailView.as_view()), 12 path('dj-rest-auth/registration/', include('dj_rest_auth.registration.urls')), 13 path('dj-rest-auth/account-confirm-email/', VerifyEmailView.as_view(), name='account_email_verification_sent'), 14 path('dj-rest-auth/', include('dj_rest_auth.urls')), 15]
nginx
1### frontend/nginx/default.dev.conf 2upstream react { 3 server web-front:3000; 4} 5 6server { 7 listen 80; 8 9 location = /healthz { 10 return 200; 11 } 12 13 location / { 14 proxy_pass http://react; 15 proxy_set_header Host $host; 16 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 17 proxy_redirect off; 18 } 19 location / sockjs-node { 20 proxy_pass http://react; 21 proxy_http_version 1.1; 22 proxy_set_header Upgrade $http_upgrade; 23 proxy_set_header Connection "upgrade"; 24 } 25 26 error_page 500 502 503 504 /50x.html; 27 28 location = /50x.html { 29 root /usr/share/nginx/html; 30 } 31}
試したこと
dj-rest-authのGitHubを見て確認メールに表示するurlをどうやって作成しているのかを調べました。
結果としてget_email_confirmation_urlという関数を使用してurlを作成していることは分かったんですが、そこから進展がなかったので質問しました。
get_email_confirmation_url
補足情報(FW/ツールのバージョンなど)
asgiref == 3.2.10 Django == 3.1 django-cors-headers == 3.7.0 djangorestframework == 3.12.2 djangorestframework-simplejwt == 4.6.0 dj-rest-auth == 2.1.3 django-allauth == 0.44.0 pycryptodome == 3.10.1 gunicorn == 20.0.4 psycopg2-binary == 2.8.6 python-dotenv == 0.15.0 Pillow == 8.1.2 django-imagekit == 4.0.2 django-cleanup == 5.1.0 sqlparse == 0.4.1 pytz == 2021.1 mysqlclient == 2.0.3
わかりにくい質問だったらすみません。
回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/12 04:36