django-allauthを使用して動作する「facebookでログイン」を作成しました。しかし、allauthが自動的に活動化されないようにする新しいユーザーアカウントが必要です。Djangoで新しいユーザーアカウントを手動で有効にする
基本的には、Djangoの管理ページからすべての新しいアカウントを有効にしたいと思います。
これに対するベストプラクティスの解決策は何ですか?
ありがとうございました
django-allauthを使用して動作する「facebookでログイン」を作成しました。しかし、allauthが自動的に活動化されないようにする新しいユーザーアカウントが必要です。Djangoで新しいユーザーアカウントを手動で有効にする
基本的には、Djangoの管理ページからすべての新しいアカウントを有効にしたいと思います。
これに対するベストプラクティスの解決策は何ですか?
ありがとうございました
アカウントが有効になっているかどうかUser
モデルには、何らかの種類のフィールドが必要です。
class User(BaseUser):
is_activated = models.BooleanField(default=False)
と、それはそれだ:
はのは、あなたのフィールドがと呼ばれているとしましょう。このフィールドのデフォルト値はFalse
です。つまり、作成されたユーザーはデフォルトでアクティブ化されません。
次に、このフィールドを管理ページに追加してそこから切り替えることができます。
希望すると助かります!
ありがとう!だから私はそれを取るユーザーモデルを拡張する必要があります。クール。私のテンプレートでは、{%user.is_authenticated%}を使用しています。 is_activatedがtrueに設定されていないすべてのアカウントで "user.is_authenticated"が "false"を返すようにするにはどうすればよいですか?または、 "is_activated"もチェックするようにすべてのテンプレートを書き直す必要がありますか?ありがとう!! – Daggepagge
@Daggepagge is_authenticatedを上書きするカスタムアクセス許可クラスを作成する必要があります。最も簡単な方法は、if文をこの{{if if user.is_authenticated and user.is_activated%}}に変更することです。 –
私が作ったときに私がこの巨大な問題を抱えていたため、私はいくつかの人が(たいていは幾人かの人の中にはほとんどいない)クリックして「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 '?')
:でgged (チュートリアル)[https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html]は、それをどうやって進めるかについて助けになるかもしれません。 – deaspo
ありがとう!リンクは壊れています。ああ私はそのブラケットを参照してください、ありがとう – Daggepagge
https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html – deaspo