[Django] ユーザー登録とログインを同時に行う
Djangoでのユーザー登録完了と同時にログイン状態にする方法をメモ
自動的にログインしない場合の実装(ユーザー登録のみ)
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views.generic import CreateView
class UserCreateView(CreateView):
form_class = UserCreationForm
template_name = "accounts/usercreate.html"
success_url = reverse_lazy("login")
CreateView
を継承したViewで普通にユーザーを作成してログインページにリダイレクト
新規登録完了と同時にログイン状態にする実装
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views.generic import CreateView
from django.contrib.auth import login, authenticate # 追記
class UserCreateAndLoginView(CreateView):
form_class = UserCreationForm
template_name = "accounts/usercreate.html"
success_url = reverse_lazy("index") # 変更
def form_valid(self, form): # 追記
response = super().form_valid(form)
username = form.cleaned_data.get("username")
raw_pw = form.cleaned_data.get("password1")
user = authenticate(username=username, password=raw_pw)
login(self.request, user)
return response
フォームへの入力の検証後、新規ユーザーがデータベースへ登録されるので、そのままフォームからユーザー名とパスワードを取り出して、ログインさせます。
その後トップページにリダイレクト
さいごに
意外と簡単に実装できました。
ログインやログアウトは最初から実装されているのに
何でこの辺の機能はデフォルトで用意されていないんでしょう?
新規登録の方法はサービスによってまちまちだからですかね?