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

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

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

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

Python

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

Q&A

解決済

1回答

1381閲覧

【Python】CSRFに関してのエラー

user0930

総合スコア7

Django

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

Python

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

0グッド

0クリップ

投稿2023/08/11 16:48

編集2023/08/11 17:05

実現したいこと

作成したアプリでログイン機能とサインアップ機能の際にログインしようとしたり、サインアップしようとしたらエラーが発生してしまいました。
ログインとサインアップが出来るようにしたいです。
CSRFに関するエラーなのですが、見て貰えないでしょうか?

発生している問題・エラーメッセージ

アクセス禁止 (403) CSRF検証に失敗したため、リクエストは中断されました。 Help Reason given for failure: Origin checking failed - https://***********************.vfs.cloud9.ap-northeast-1.amazonaws.com does not match any trusted origins. In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django’s CSRF mechanism has not been used correctly. For POST forms, you need to ensure: Your browser is accepting cookies. The view function passes a request to the template’s render method. In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data. The form has a valid CSRF token. After logging in in another browser tab or hitting the back button after a login, you may need to reload the page with the form, because the token is rotated after a login. You’re seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed. You can customize this page using the CSRF_FAILURE_VIEW setting.

該当のソースコード

templates/accounts/signup.html

1{% extends 'layout.html' %} 2 3{% block content %} 4<h1>ユーザー登録</h1> 5<section class='common-form'> 6 <form method='post'> 7 {% csrf_token %} ←CSRFの記述 8 {{ form.as_p }} 9 <button type='submit'>登録</button> 10 </form> 11</section> 12{% endblock %}

templates/registration/login.html

1{% extends '../layout.html' %} 2 3{% block content %} 4<h1>Login</h1> 5<section class='common-form'> 6 {% if form.errors %} 7 <p class='error-msg'>ユーザー名とパスワードが一致しません。もう一度入力しなおしてください。</p> 8 {% endif %} 9 10 {% if next %} 11 {% if user.is_authenticated %} 12 <p class='error-msg'>このアカウントではアクセスできません。</p> 13 {% else %} 14 <p class='error-msg'>このページにアクセスするためにはログインしてください。</p> 15 {% endif %} 16 {% endif %} 17 18 <form action='{% url "login" %}' method='post'> 19 {% csrf_token %}  ←CSRFの記述 20 <input type='hidden' name='next' value='{{ next }}'/> 21 {{ form.as_p }} 22 <button type='submit'>ログイン</button> 23 </form> 24</section> 25{% endblock %}

試したこと

CSRFについて調べて、フォームの書き方が間違いかと思い、確認したのですが、
間違っている様には見えませんでした。

またPythonのバージョンを上げた事に伴い、djangoのバージョンも上がったようで、それによって影響しているのかなとも、考えていますがどうでしょうか?

補足情報(FW/ツールのバージョンなど)

python: Python 3.11.0
django: 4.2.4

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

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

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

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

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

ikedas

2023/08/12 00:40

エラーメッセージの翻訳です。ここに書いてあることを確認すればいいのではないですか。 ヘルプ 失敗の理由 オリジンチェックに失敗しました - https://***************.vfs.cloud9.ap-northeast-1.amazonaws.com は信頼されたオリジンにマッチしません。 一般に、これは本物のクロスサイトリクエストフォージャリがあるか、 Django の CSRF 機構が正しく使われていない場合に起こります。POST フォームでは、以下のことを確認する必要があります: ブラウザがクッキーを受け入れていること。 ビュー関数がテンプレートの render メソッドにリクエストを渡していること。 テンプレートでは、内部 URL をターゲットとする各 POST フォーム内に {% csrf_token %} テンプレートタグがあること。 CsrfViewMiddleware を使用していない場合は、csrf_token テンプレートタグを使用するビューと POST データを受け付けるビューで csrf_protect を使用する必要があります。 フォームには有効な CSRF トークンがあること。ブラウザの別のタブでログインしたり、ログイン後に戻るボタンを押したりすると、ログイン後にトークンがローテーションされるため、フォームのあるページをリロードする必要があるかもしれません。 このページのヘルプが表示されているのは、Django の設定ファイルで DEBUG = True になっているからです。これを False に変更すると、最初のエラーメッセージだけが表示されます。 CSRF_FAILURE_VIEW 設定を使ってこのページをカスタマイズできます。 www.DeepL.com/Translator(無料版)で翻訳しました。
guest

回答1

0

自己解決

CSRF_TRUSTED_ORIGINS = ['https://***************.vfs.cloud9.ap-northeast-1.amazonaws.com']

をsettingに登録したことにより、エラーは無くなりました。

投稿2023/08/12 02:43

user0930

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問