2016-11-22 6 views
1

Djangoでデフォルトユーザー認証はUsernamePasswordで統合されています。私のプロジェクトのプロフィールページで、私はUsernameを変更するオプションがあります。ですから、バックエンドとフロントエンドの認証システムをemailpasswordに変更する必要があります。Django 1.10 - フロントエンドユーザー認証をユーザー名から電子メールに変更するにはどうすればいいですか?

authentication backendを使用すると、管理者のデフォルト認証システムをemailpasswordに変更できます。私は、フロントエンドでて認証を行うことができますどのように思っていた

AUTHENTICATION_BACKENDS = (
    'apps.account.email-auth.EmailBackend', 
) 

-

class EmailBackend(object): 
    def authenticate(self, username=None, password=None, **kwargs): 
     UserModel = get_user_model() 
     try: 
      user = UserModel.objects.get(email=username) 
     except UserModel.DoesNotExist: 
      return None 
     else: 
      if getattr(user, 'is_active', False) and user.check_password(password): 
       return user 
     return None 

    def get_user(self, user_id): 
     try: 
      return User.objects.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 

settings.pyで - ここでは、コードです。既に、私はemailpasswordを通して前のログインページを準備しました。

しかしform.errorsを参照し、予測はAUTHENTICATION_BACKENDS

のような任意のフロント認証が欠落しなければならないあなたの助けのためにありがとうございました!

+0

ここにはフロントエンドの認証手段がありますか?あなたが作成したものは、管理者とクライアントにも適用可能です。 – itzMEonTV

+0

あなたはそれを明確にしてください。 –

+0

django authの 'User'フィールド' username'は一意ですが、 'email'はそうではありません。 'authenticate'に' MultipleObjectsReturned'もキャッチする必要があります。 – schwobaseggl

答えて

0

パッケージdjango-allauthがあります。認証を処理します。 認証に「電子メール」と「パスワード」または「ユーザー名」と「パスワード」を使用できます。フォームや必要なものがすべて含まれています。 Django-cookiecutterプロジェクトテンプレートは、このパッケージを使用して認証を処理するので、そこを見てサンプルとして使用できます。

1

実は答えはメソッド内にある -

def authenticate(self, username=None, password=None, **kwargs): 

フロントエンドでは、emailでユーザーの入力を命名することは、メソッド内で渡されることはないエラーを形成する資格情報と一致していないと表示。だから、入力を単にusernameとすると、そのトリックは解決されます。

関連する問題