手動(サーバー側で開始)ログインを実装する最良の方法を見つけるのにご協力いただければ幸いです。それなしパスワードを使用します。ワークフローを説明します。
- ユーザー登録
- ありがとうございます!アクティベーションリンクを記載したメールが送信されました。
- (アカウントは現在存在しますが、有効になっていないとマークされています)
- ユーザーがメールを開き、リンクをクリックする
- (アカウントが有効です)
- ありがとうございます!サイトをご利用いただけるようになりました
私がやろうとしているのは、ユーザーが電子メールのリンクをクリックした後にログインして、すぐに Web サイトの使用を開始できるようにすることです。
パスワードは DB で暗号化されているため使用できません。カスタム認証バックエンドを作成するのが唯一の選択肢でしょうか?
ベストアンサー1
ユーザーのログインにはパスワードは必要ありません。auth.login
関数はオブジェクトを受け取るだけですUser
。このオブジェクトは、アカウントを有効にしたときにデータベースから既に取得されているものと思われます。そのため、それを に直接渡すことができますlogin
。
もちろん、とてもユーザーが既存の有効なアカウントへのリンクを偽装して、そのユーザーとして自動的にログインできないように注意してください。
from django.contrib.auth import login
def activate_account(request, hash):
account = get_account_from_hash(hash)
if not account.is_active:
account.activate()
account.save()
user = account.user
login(request, user)
...などなど
編集済み:
authenticate
うーん、追加プロパティのために使用する必要があることに気が付きませんでした。コードを見ると、backend
認証バックエンドのモジュール パスに相当する属性だけが行われています。したがって、上記のログイン呼び出しの前に、次のようにして偽装することができます。
user.backend = 'django.contrib.auth.backends.ModelBackend'