2017-10-01 11 views
0

django-allauthを使用して動作する「facebookでログイン」を作成しました。しかし、allauthが自動的に活動化されないようにする新しいユーザーアカウントが必要です。Djangoで新しいユーザーアカウントを手動で有効にする

基本的には、Djangoの管理ページからすべての新しいアカウントを有効にしたいと思います。

これに対するベストプラクティスの解決策は何ですか?

ありがとうございました

+1

:でgged (チュートリアル)[https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html]は、それをどうやって進めるかについて助けになるかもしれません。 – deaspo

+0

ありがとう!リンクは壊れています。ああ私はそのブラケットを参照してください、ありがとう – Daggepagge

+0

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html – deaspo

答えて

1

アカウントが有効になっているかどうかUserモデルには、何らかの種類のフィールドが必要です。

class User(BaseUser): 
    is_activated = models.BooleanField(default=False) 
と、それはそれだ:

はのは、あなたのフィールドが​​と呼ばれているとしましょう。このフィールドのデフォルト値はFalseです。つまり、作成されたユーザーはデフォルトでアクティブ化されません。

次に、このフィールドを管理ページに追加してそこから切り替えることができます。

希望すると助かります!

+0

ありがとう!だから私はそれを取るユーザーモデルを拡張する必要があります。クール。私のテンプレートでは、{%user.is_authenticated%}を使用しています。 is_activatedがtrueに設定されていないすべてのアカウントで "user.is_authenticated"が "false"を返すようにするにはどうすればよいですか?または、 "is_activated"もチェックするようにすべてのテンプレートを書き直す必要がありますか?ありがとう!! – Daggepagge

+1

@Daggepagge is_authenticatedを上書きするカスタムアクセス許可クラスを作成する必要があります。最も簡単な方法は、if文をこの{{if if user.is_authenticated and user.is_activated%}}に変更することです。 –

1

私が作ったときに私がこの巨大な問題を抱えていたため、私はいくつかの人が(たいていは幾人かの人の中にはほとんどいない)クリックして「googleでログイン」や時には「facebookでログイン」これは同じ人です!そのため、この解決方法はこのような問題を回避するのに役立ちます。覚えておくべき唯一のこと:すべてのソーシャルネットワーク用に1つのプライマリキーがあります。メールはです。

Like it's written in the documentationの場合、UserモデルへのOneToOneリンクを作成します。このことから 私はこれをお勧めします:

正確
  • 正確な最初のログインの最後のログインこのよう
  • 正確なアカウントが検証されている場合

の日の日付:

from django.contrib.auth.models import User 

class Person(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    is_activated = models.BooleanField(default=False) 

ソーシャルログインモデルを作成します私の最高のアドバイスは、ユーザーにカスタム・ユーザー・モデル、(ドキュメントを参照してください)[https://docs.djangoproject.com/en/1.11/topics/auth/customizing/]、およびある

class SocialLogin(BaseModel): 
    S_GOOGLE = 1 
    S_FACEBOOK = 2 

    TAB_S_LOGIN = { 
     S_GOOGLE: _("Google"), 
     S_FACEBOOK: _("Facebook"), 
    } 
    logged_in = models.IntegerField(
     choices=[(a, b) for a, b in list(TAB_S_LOGIN.items())], 
     default=S_GOOGLE) 
    date_first_login = models.DateTimeField(auto_now_add=True, 
              verbose_name=_('First login')) 
    date_last_login = models.DateTimeField(auto_now=True, 
              verbose_name=_('Last login')) 
    person = models.OneToOneField(Person, on_delete=models.CASCADE) 

    def logged_in_desc(self): 
     return SocialLogin.TAB_S_LOGIN[self.logged_in] 

    def __str__(self): 
     return '{}/{}'.format(
      self.logged_in_desc(), 
      description if self.description is not None else '?') 
関連する問題