nobu blog

プログラミングやゲームの話など。

*



【Django】all_authのソーシャルログイン時に表示するエラーメッセージを変更する

   

概要

Djangoでログイン機能を実装する際に、一般的にdjango-allauthを使用する事が多いかと思います。
django-allauthを使用する事で一般的なログイン機能はもちろんのこと、ソーシャルログインに関しても簡単に実装ができてしまします。
今回はソーシャルログイン時を使用した時に、既に同じメールアドレスの既存アカウントが存在する場合のバリデーションエラーの文言を変更する方法を紹介します。

スポンサーリンク

詳細の背景

django-allauthを使用して、ソーシャルログインを実装すると、ソーシャルアカウントから取得したメールアドレスが既存アカウントに既に存在する場合には、違うメールアドレスを入力させるため、下記のようにメールアドレスの入力画面が表示される。
この際に、再度存在するメールアドレスを入力すると、
"An account already exists with this e-mail address. Please sign in to that account first, then connect your XXXX account."といったエラーメッセージが表示されます。
(XXXXはTwitter等のソーシャルのサービス名)

エラー文言

django-allauth基本的に多言語対応されているので、日本語でメッセージが表示されますが、この部分は対応するメッセージが用意されていないので、英語が表示されていまします。
本記事ではこの内容を任意の日本語に書き換えます。

スポンサーリンク

対応方法

django_allauthの該当のエラーメッセージを出力する箇所をオーバーライドしたFormクラスを作成します。
SignupFormクラスを継承して、CustomSignupFormクラスを作成して、validate_unique_emailメソッドをオーバーライドします。
forms.ValidationError発生時に下記のように任意の文言を出力するように変更します。

次にsetting.pyに下記のような設定を追加します。accounts.forms.CustomSignupFormの部分は先ほど作成したフォームのクラス名を指定します。

このような対応を行う事で、CustomSignupFormが使用されるようになり、任意の日本語エラー文言を表示する事ができます。

エラー

 - python