【绝对能做到!】谷歌登录按钮的实现【2/6】
绝对能办到!Google登录按钮的实现【2/6】
本文介绍了在React × DjangoRESTFramework中实现Google登录按钮的教程,这是其中的第二部分。如果要从第一部分开始阅读,请点击这里。導入偏的部分0请点击这里。
第二部分:创建后端
0. 对环境变化的理解
这段的流程如下所示。
-
- 创建虚拟环境
-
- 安装库
-
- 创建Django项目
-
- 更改项目设置
-
- 创建变量设置文件
-
- 创建URL
-
- 首次迁移,创建超级用户
-
- 创建django-social-oauth应用程序
- 确认DRF(Django Rest Framework)的使用情况
1. 创建虚拟环境
$ python -m venv tutorial
$ source tutorial/bin/activate
$ pip install --upgrade pip
2. 安装必要的库文件
- requirements.txtに記入
$ vi requirements.txt
django
djangorestframework
drf_social_oauth2
python-decouple
django-cors-headers
drf_social_oauth2 : 使用DRF进行社交登录功能时所需
python_decouple : 从.env文件中提取数据时所需
django-cors-headers : 在React和Django之间进行CORS跨域通信时所需
- install実行
$ pip install -r requirements.txt
$ pip list
Package Version
---------------------- --------
Django 3.2.11
django-cors-headers 3.10.1
django-oauth-toolkit 1.7.0
djangorestframework 3.13.1
drf-social-oauth2 1.2.1
python-decouple 3.5
3. 创建项目
$ django-admin startproject backend
$ cd backend
4. 项目设定
- INSTALLED_APPS に ライブラリを追加
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 以下追加
'rest_framework',
'drf_social_oauth2',
'social_django',
'oauth2_provider',
'corsheaders',
]
- MIDDLEWARE にも追加
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 以下追加
'corsheaders.middleware.CorsMiddleware',
]
- CORS 設定追記
# React との CORS の設定
CORS_ALLOWED_ORIGINS = [
"http://localhost:3000" # Reactはport:3000を利用
]
- TEMPLATES を以下の通り追加
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# 以下追加
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
- REST framework 設定を追加
# REST framework 設定
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
'drf_social_oauth2.authentication.SocialAuthentication',
),
}
AUTHENTICATION_BACKENDS = (
# Google OAuth2 の認証バックエンド
'social_core.backends.google.GoogleOAuth2',
# Django REST framework の認証バックエンド
'drf_social_oauth2.backends.DjangoOAuth2',
# Django の認証バックエンド
'django.contrib.auth.backends.ModelBackend',
)
- さらに、Google OAuth 関連設定追加
# decouple から config をインポート
from decouple import config
# Google から取得した鍵情報
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = config("SOCIAL_AUTH_GOOGLE_OAUTH2_KEY")
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = config("SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET")
# アクセススコープの設定
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
]
- (オプション)言語設定
由于易于理解,所以事先将其翻译成日语。
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
5. 创建变量设置文件
我们将Google Cloud获得的认证信息的ID和密钥保存为变量。请创建.env文件。
※将其创建在项目的根目录下(与manage.py文件在同一层)。
$ vi .env
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY="499058585498-xxxxxxxxxxxx.apps.googleusercontent.com"
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET="GOCSxxxxxxxxxxxxnn3rV"
6. 网址的配置
from django.contrib import admin
from django.urls import path, include # include追加
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include('drf_social_oauth2.urls', namespace='drf')), # 追加
]
7. 迁移,建立超级用户
$ python manage.py migrate
$ python manage.py createsuperuser --email=your.email@gmail.com --username=admin
8. 管理页面设置
- サーバ起動
$ python manage.py runserver
请使用创建的管理员用户登录到 http://127.0.0.1:8000/admin。
- 创建应用程序

添加 Django OAuth Toolkit 的应用程序
- 设定

Client id , Client secret の値は自動で作成されています 後ほど利用するのでどこかメモ帳に控えておきましょう(※値を変更しないよう注意してください)
その他以下の通り設定し、保存
User : 1
Client type : Confidental
Authorization grant type : Resource owner password-based
Name : 適当に入力(自分はGoogle OAuthにしました)
9. 確認DRF
尝试访问 http://127.0.0.1:8000/auth/convert-token,如果出现以下页面,则表示暂时OK!

第二部分结束
辛苦了,请在下一部分进行前端设置。