質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2652閲覧

dj-rest-authでユーザー認証の確認メールに正しいurlが表示されない

fly_snail

総合スコア2

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/20 17:54

編集2021/03/20 17:57

前提・実現したいこと

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

わかりにくい質問だったらすみません。
回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サーバーのポート番号は、下記で取得できます。
メールボディーをレンダリングするときに、ポート番号を出力するのはどうでしょうか。
また、'80' の場合は、ポート番号を出力しないとか・・・。

python

1request.META['SERVER_PORT']

HttpRequest.META

投稿2021/03/22 07:17

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fly_snail

2021/04/12 04:36

解決しました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問