[解決済み] Django - メールでログイン
2022-09-19 09:23:30
質問
django にユーザ名ではなく、電子メールでユーザを認証させたいのです。一つの方法として、ユーザ名の値として電子メールの値を提供することができますが、私はそれをしたくありません。理由は、私はURLを持っている
/profile/<username>/
であり、それ故に私は url を持つことができません。
/profile/[email protected]/
.
もう一つの理由は、すべてのメールは一意ですが、ユーザ名がすでに取られていることがあるからです。そこで、私はユーザー名を
fullName_ID
.
Django が電子メールで認証するようにするにはどうすればよいですか?
これはユーザを作成する方法です。
username = `abcd28`
user_email = `[email protected]`
user = User.objects.create_user(username, user_email, user_pass)
このようにログインします。
email = request.POST['email']
password = request.POST['password']
username = User.objects.get(email=email.lower()).username
user = authenticate(username=username, password=password)
login(request, user)
ユーザー名を最初に取得する以外に、ログインの方法はありますか?
どのように解決するのですか?
カスタム認証バックエンドを作成する必要があります。このようなものが有効です。
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
次に、設定でそのバックエンドを認証バックエンドとして設定します。
AUTHENTICATION_BACKENDS = ['path.to.auth.module.EmailBackend']
更新
. を継承しています。
ModelBackend
のようなメソッドを実装しているので
get_user()
のようなメソッドを実装しているためです。
ドキュメントはこちら。 https://docs.djangoproject.com/en/3.0/topics/auth/customizing/#writing-an-authentication-backend
関連
-
オペレーショナルエラーです。1050 解決
-
Django の ForeignKey パラメータの使用法
-
[解決済み] Django で完全な/絶対的な URL (ドメイン付き) を取得するにはどうすればよいですか?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] Django で現在ログインしているユーザのユーザ ID を取得する方法は?
-
[解決済み] django で複数のオブジェクトを削除する
-
[解決済み] Djangoのクッキー、どうすれば設定できますか?
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?
-
[解決済み] Djangoテンプレートでネストされたforループで一番外側のforloop.counterにアクセスする方法は?
-
[解決済み] django のユニットテストを複数のファイルに分散させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
django request.data を修正する AttributeError: 属性を設定できない
-
[解決済み] Django の修正 管理者の複数形
-
[解決済み] Django REST Framework: ModelSerializerに追加フィールドを追加する
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] DjangoとReactJSを連携させる方法とは?
-
[解決済み] Djangoアプリの命名規則はありますか?
-
[解決済み] Docker-Compose使用時にDjangoデータベースのマイグレーションをどのように行うか?
-
[解決済み] Django: テンプレート内からセッション変数にアクセスする?
-
[解決済み] Djangoテンプレートでネストされたforループで一番外側のforloop.counterにアクセスする方法は?
-
[解決済み] Django の日付テンプレートのデフォルトフォーマットを変更するには?