ユーザ認証を設定します。
※ 以下は reactjs-auth-django-rest をベースにしています。
Django アプリ user_profile を作成します。( アプリ名は任意 )
(backend) try🐶everything backend$ django-admin startapp user_profile (backend) try🐶everything backend$ cd user_profile/
user_profile/adapter.py を作成します。( 新 )
from django.contrib.sites.shortcuts import get_current_site from allauth.account.adapter import DefaultAccountAdapter class MyAccountAdapter(DefaultAccountAdapter): def get_email_confirmation_url(self, request, emailconfirmation): current_site = get_current_site(request) return '{}/account/confirm-email/{}/'.format(current_site, emailconfirmation.key)
user_profile/views.py を編集します。
# permissions from rest_framework.decorators import permission_classes from rest_framework import permissions from rest_framework.permissions import IsAuthenticated from django.contrib.auth import get_user_model User = get_user_model() from rest_framework.decorators import action from rest_framework import viewsets from rest_framework.generics import get_object_or_404 from rest_framework.response import Response from rest_framework import status, viewsets from users.serializers import UserSerializer class UserViewSet(viewsets.ReadOnlyModelViewSet): """ This viewset automatically provides `list` and `detail` actions. """ queryset = User.objects.all().order_by('id') serializer_class = UserSerializer permission_classes = (IsAuthenticated, ) @action(detail=False) # retrieve current_user def me(self, request, *args, **kwargs): serializer_context = { 'request': request, } user = get_object_or_404(User, id=request.user.id) return Response(UserSerializer(request.user, context=serializer_context).data, status=status.HTTP_200_OK)
PostgreSQL を設定します。
データベースをデフォルトの sqlite3 の代わりに、PostgreSQL を使用します。
( sqllite3 を使用する場合はスキップしてください。)
PostgreSQLを設置するには、下記のコマンドでインストールできます。
brew install postgresql
sqlite3 をコメントアウトし、PostgreSQL 設定を追加します。
( 最初に project/settings.py を編集しましたので、下記は参考までに。)
(backend) try🐶everything backend$ vi project/settings.py
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'database名', 'USER': 'ユーザ名', 'PASSWORD': 'ユーザパスワード', 'HOST': 'localhost', 'PORT': '', } }
データベースとユーザを作成します。
コマンド:CREATE DATABASE database名 OWNER ユーザ名;
コマンド:CREATE USER ユーザ名 ‘ユーザパスワード;
(backend) try🐶everything backend$ psql postgres psql (11.3) Type "help" for help. postgres=# CREATE DATABASE database名 OWNER ユーザ名; CREATE DATABASE postgres=# postgres=# CREATE USER ユーザ名 'ユーザパスワード; postgres'# postgres=# SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig -------------+----------+-------------+----------+---------+--------------+----------+----------+----------- macadmin | 10 | t | t | t | t | ******** | | ユーザ名 | 16960 | f | f | f | f | ******** | | (3 rows) postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------------+----------+-------------+-------------+----------------------------- postgres | macadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | database名 | ユーザ名 | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | macadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/macadmin + | | | | | macadmin=CTc/macadmin template1 | macadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/macadmin + | | | | | macadmin=CTc/macadmin (4 rows)
追加した内容をマイグレーションし、データベースに反映します。
コマンド:python manage.py makemigrations users
(backend) try🐶everything backend$ python manage.py makemigrations users Migrations for 'users': users/migrations/0001_initial.py - Create model CustomUser (backend) try🐶everything backend$
コマンド:python manage.py migrate
(backend) try🐶everything backend$ python manage.py migrate Operations to perform: Apply all migrations: account, admin, auth, authtoken, contenttypes, sessions, sites, socialaccount, users Running migrations: Applying authtoken.0001_initial... OK Applying authtoken.0002_auto_20160226_1747... OK Applying socialaccount.0001_initial... OK Applying socialaccount.0002_token_max_lengths... OK Applying socialaccount.0003_extra_data_default_dict... OK (backend) try🐶everything backend$
Superuser を作成します。
デフォルトのユーザ登録の場合: Username / Email / Password ( 参考のみ )
Username: admin
Email address: admin@example.com
Password: パスワードを入力
Password (again): 再度入力
Superuser created successfully.
(backend) try🐶everything backend$
↓↓↓
今回修正したユーザ登録方法:Email / Password
Email: admin@example.com
Password:パスワードを入力
Password (again):パスワードを入力
Superuser created successfully.
(backend) try🐶everything backend$
全て問題なければ、Django 開発サーバ を起動します。
(backend) try🐶everything backend$ python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). October 07, 2019 - 19:37:20 Django version 2.2, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
http://127.0.0.1:8000/api/ にアクセスして API サイトを確認します。
http://127.0.0.1:8000/admin にもアクセスしてみてください。
この時点ではフロンドエンド側のユーザ登録フォームの実装やユーザ認証設定ができていませんので、ユーザの登録 ( 追加 ) は Django admin で直接追加するしかありません。
次は、フロントエンド側を設定します。
コメント