single.php

Djangoでユーザーのサインアップ時に認証後の画面にリダイレクトする手順

Python + Django でアプリケーションにユーザーがアカウントのサインアップ画面でユーザー登録後に、自動でサインインする手順を備忘録的に投稿します。

サインイン後の画面にリダイレクト

正解は無いですが、サインアップ後にセキュリティを重視して認証を行うために「サインイン」画面を表示するアプリもありますし、認証のプロセスをスキップしてユーザー画面を表示するサイトもあります。

[from django.contrib.auth]に[authenticate]クラスを使って、ユーザー登録の操作後にユーザー認証を自動で行いサインイン後の画面にリダイレクトさせることができます。

実装も短期間でできるので、サインアップ用のビューを修正でき簡単にアプリに追加することができます。

サインアップ後にリダイレクトさせる手順

Djangoではライブラリ内にあるAbstractUserをカスタマイズすることでアプリ内のユーザーのサインイン(ログイン)機能を実装することができます。AbstractUserを使ったサインインの追加については別記事をご覧ください。

AbstractUserでカスタマイズしたアカウントは[UserCreationForm]クラスを拡張することで管理画面と同様に追加(サインアップ)させることができ、[authenticate]クラスを使って認証後に指定したURLにリダイレクトさせることができます。

具体的には次の手順で進めます。(djangoプロジェクト[site01]アプリケーション[app01]が作成されてサインイン機能が追加されている前提です)

1. VSCodeを起動してアプリケーション[app01]フォルダー内の[views.py]ファイルを開き、次のコードを追加します。

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login

from .form import SignUpForm

def index(request):
    return render(request, 'app01/index.html')

@login_required
def home(request):
    return render(request, 'app01/home.html')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('index')
    else:
        form = SignUpForm()
    return render(request, 'app01/signup.html', {'form': form})
    

2.[ターミナル]画面に次のコマンドを入力して実行します。

python manage.py runserver

3. ブラウザのURL画面に[http://localhost;8000/app01/signup/]と入力します。

4. ユーザー名やパスワードを入力して[ユーザー登録]をクリックします。

5. 画面が遷移して[サインイン]後の画面が表示されます。

6. ブラウザのURL画面に[http://localhost;8000/admin/]と入力して表示された管理画面でユーザーが登録されているか確認します。

[authenticate]クラスを利用することで、ユーザー認証を行うことができます。

まとめ

Djangoの[authenticate]クラスを使うことで、ユーザー名とパスワードを使って既存ユーザーの認証をコードで行い、サインインを自動化をすることができます。

認証操作後に、適当なURLにリダイレクトさせることでユーザーがサインアップ後にサインインを省略して、サインイン後の画面を表示する機能を実装することができます。

Python + Djangoのプロジェクトでユーザーのサインアップ後の自動サインインを追加する際の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です