スポンサーリンク
概要
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発生時に下記のように任意の文言を出力するように変更します。
1 2 3 4 5 6 7 8 9 10 |
from django import forms from allauth.socialaccount.forms import SignupForm class CustomSignupForm(SignupForm): def validate_unique_email(self, value): try: return super(SignupForm, self).validate_unique_email(value) except forms.ValidationError: raise forms.ValidationError("既に同じメールアドレスが登録済みです。別のメールアドレスを登録お願いします。") |
次にsetting.pyに下記のような設定を追加します。accounts.forms.CustomSignupFormの部分は先ほど作成したフォームのクラス名を指定します。
1 2 3 |
SOCIALACCOUNT_FORMS = { 'signup': 'accounts.forms.CustomSignupForm' } |
このような対応を行う事で、CustomSignupFormが使用されるようになり、任意の日本語エラー文言を表示する事ができます。