end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

social-app-django for pytho による google oauth ログイン (social login/auth)

https://nmomos.com/tips/2019/07/05/django-social-auth/

google の oauth を使用したログインを実現する為、 上記urlの google 関連部分を写経。

TODO

参考url

Step1: python仮想環境作成と auth-app-django の install や django project 作成

## 仮想環境 作成
$ cd ~/dev/
$ python3 -m venv venv_social_auth

## 仮想環境 有効化
$ cd venv_social_auth
$ source ./bin/activate

## django や social-auth-app-django の install
$ pip install django==2.2
$ pip install social-auth-app-django

## django project 作成.
## (通常、djangoでは config dir名 = project名となる為
##  一度、config の名前でproject を作成し、後でdir名を変更)
$ django-admin startproject config
$ mv config social_auth

※「python manage.py startapp ~」のように通常、project内に アプリを作成しますが、今回は極小規模ですので、これを行いません。

Step2: auth-app-django install 後の設定

$ vi config/setting.py
ALLOWED_HOSTS = ['*']                                              ## CHANGE

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'social_django',                                           ## ADD
]

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',

    'social_django.middleware.SocialAuthExceptionMiddleware',     ## ADD
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],            ## CHANGE
        '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',       ## ADD
                'social_django.context_processors.login_redirect', ## ADD
            ],
        },
    },
]

AUTHENTICATION_BACKENDS = (                         ## ADD
    'social_core.backends.open_id.OpenIdAuth',      ## ADD
    'social_core.backends.google.GoogleOpenId',     ## ADD
    'social_core.backends.google.GoogleOAuth2',     ## ADD

    'social_core.backends.github.GithubOAuth2',     ## ADD
    'social_core.backends.twitter.TwitterOAuth',    ## ADD
    'social_core.backends.facebook.FacebookOAuth2', ## ADD

    'django.contrib.auth.backends.ModelBackend',    ## ADD
)                                                   ## ADD


LOGIN_URL          = 'login'                        ## ADD
LOGIN_REDIRECT_URL = 'home'                         ## ADD
$ vi config/urls.py

from django.conf.urls import include                ## ADD
from django.contrib.auth import views as auth_views ## ADD
from . import views                                 ## ADD

urlpatterns = [
    path('admin/', admin.site.urls),

    path('', views.index, name='index'),                               ## ADD
    path('login/', auth_views.LoginView.as_view(), name='login'),      ## ADD
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),   ## ADD
    path('oauth/', include('social_django.urls', namespace='social')), ## ADD
    path('accounts/profile/', views.index, name='index')               ## ADD
]

Step3: auth-app-django install 後の db migrate

social-app-django は migrate 情報を持っている為、 事前の「python manage.py makemigrations」実行は不要です

$ python manage.py migrate

Step4: Goolge Developers Console で クライアント ID/シークレット取得

以降では、Googleのproject作成後における認証情報設定等について記載します。

まず、画面左上にある「Google APIs」をクリックし、 画面左にメニューペインを表示

f:id:end0tknr:20200508083357p:plain

「認証情報」→「同意画面を構成」をクリック

f:id:end0tknr:20200508083407p:plain

「OAuth同意画面」の「User Type」で「外部」を選択

f:id:end0tknr:20200508083422p:plain

「OAuth同意画面」の「アプリケーション名」を入力。 (サポートメールは入力不要かもしれません)

f:id:end0tknr:20200508083431p:plain

「認証情報を作成」→「OAuthクライアントID」をクリック

f:id:end0tknr:20200508083442p:plain

「OAuthクライアントの作成」において 「アプリケーションの種類」「名前」「承認済のリダイレクトURL」を入力

f:id:end0tknr:20200508083451p:plain

※私の場合、VirturlBox内のcentos8で動作させていることもあり 「承認済のリダイレクトURL」には以下を入力しています。

以上で、クライアント ID とシークレットが発行される為、 これを config/setting.py へ登録

$ vi config/setting.py

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY    = 'ないしょ' ## ADD
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'ないしょ' ## ADD

Step5: view や template の作成

$ vi config/views.py ## NEW FILE

from django.shortcuts import render

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

htmlテンプレートは、以下のurlにあるものをそのままcopyしました。

https://github.com/mila411/django-social-auth

Step6: django の起動と動作確認

最後に以下でdjango を起動すれば、ブラウザで動作確認可能です。

$ python manage.py runserver 0.0.0.0:8080