ぷろぐら×でざいん

Django ソーシャルログイン

Django ソーシャルログイン

Django ソーシャルログイン

Google、Facebook、Twitter、Github、Amazon、Apple、Instagramなどなど。
日々の生活において何らかしらのログインをしない日はないのではないでしょうか?あなたが今幾つアカウントを数えてみると確実3つ以上あるのではないでしょうか?あなたのサイトでもユーザーにアカウントを作らせますか?どうせなら使いまわしてもらいましょう!!

インストール

pip in stall social-auth-app-django

settings.py

各種設定を入れる。今回はGoogle、Twitter、LINE、Facebookに対応します。


import os

def env_or_default(name, default):
    return os.environ.get(name, default)


TEMPLATES = [
    {
 
        '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',  # <- Here
                'social_django.context_processors.login_redirect',  # <- Here
            ],
        },
    },
]

AUTHENTICATION_BACKENDS = (
    'social_core.backends.open_id.OpenIdAuth',
    'social_core.backends.google.GoogleOpenId',
    'social_core.backends.google.GoogleOAuth2', 
    'social_core.backends.facebook.FacebookOAuth2',
    'social_core.backends.twitter.TwitterOAuth',
    'social_core.backends.line.LineOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

# --- Google ---
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = env_or_default('SOCIAL_AUTH_GOOGLE_OAUTH2_KEY', '') Client Key
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = env_or_default('SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET', '')  # Paste Secret Key
# --- Twitter ---
SOCIAL_AUTH_TWITTER_KEY = env_or_default('SOCIAL_AUTH_TWITTER_KEY', '')
SOCIAL_AUTH_TWITTER_SECRET = env_or_default('SOCIAL_AUTH_TWITTER_SECRET', '')
# --- Facebook ---
SOCIAL_AUTH_FACEBOOK_KEY = env_or_default('SOCIAL_AUTH_FACEBOOK_KEY', '')
SOCIAL_AUTH_FACEBOOK_SECRET = env_or_default('SOCIAL_AUTH_FACEBOOK_SECRET', '')
# --- LINE ---
SOCIAL_AUTH_LINE_KEY = env_or_default('SOCIAL_AUTH_LINE_KEY', '')
SOCIAL_AUTH_LINE_SECRET = env_or_default('SOCIAL_AUTH_LINE_SECRET', '')

urls

social_django.urls を入れる。


from django.conf.urls import include
from django.contrib.auth import views
from django.urls import path


urlpatterns = [
    path('login/', views.LoginView.as_view(), name='login'),
    path('auth/', include('social_django.urls', namespace='social')),
]

templates/registration

こんなイメージ

{% block content %}
<div class="row">
  <div class="col-md-3">
  </div>
  <div class="col-md-6">
    <div class="container">
      <h2>ログイン</h2>
      <a class="btn btn-large btn-primary" href="{% url 'social:begin' 'facebook' %}">
        <i class="fa fa-facebook"> Login with Facebook</i>
      </a>
      <a class="btn btn-large btn-danger" href="{% url 'social:begin' 'google-oauth2' %}">
        <i class="fa fa-google"> Login with Google</i>
      </a>
      <a class="btn btn-large btn-info" href="{% url 'social:begin' 'twitter' %}">
        <i class="fa fa-twitter"> Login with Twitter</i>
      </a>
      <a class="btn btn-large btn-success" href="{% url 'social:begin' 'line' %}">
        <i class="fa fa-line"> Login with LINE</i>
      </a>
    </div>
  </div>
</div>
{% endblock %}

最後に

各種アカウントのAPI認証のアプリケーションを作るだけです。意外とここがハマりますよね。下記に参考リンクを貼っておきますのでそちらをご参照ください。

https://developers.google.com/identity/sign-in/web/sign-in
https://developers.facebook.com/docs/facebook-login/
https://developer.twitter.com/en/docs/twitter-for-websites/log-in-with-twitter/login-in-with-twitter
https://developers.line.biz/ja/docs/line-login/overview/

一番Twitterが苦労しました。皆様もTwitterのソーシャルログインを作る際には時間に余裕を持たせると良いかも知れません。

あとがき

この日は本職の方で色々と事故が起きました!でも事故って悪いことばかりではありません。二度と起こさないようにルールが制定されたり、従業員が1つの問題を解決に導くことで一体感が生まれたりと。
もちろん、事故は起きないことに越したことはないですが、まぁー起きますね。それでもその大きな課題を乗り越えることでよりチームは強固になるものだと私は信じています。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください