学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Django3.2 | クラウドソーシングアプリの構築 | 10 | Facebook認証

↓↓クリックして頂けると励みになります。


09 | サインアップ】 << 【ホーム】 >> 【11 | Gメール



まずは「Meta for Developers」のトップページに移動します。
developers.facebook.com


「利用を開始する」をクリックします。

利用を開始する
利用を開始する



次へ進みます。

次へ進む
次へ進む



携帯電話を入力し、SMSを送信することでアカウント認証を行います。

アカウント認証
アカウント認証



認証コードを入力して次へ

認証コードを入力
認証コードを入力



メールアドレス認証します。

メールアドレス認証
メールアドレス認証



当てはまるものにチェックを入れて登録してください。

登録完了
登録完了



右上の「マイアプリ」をクリックします。

マイアプリ
マイアプリ


「アプリを作成」をクリックします。

アプリを作成
アプリを作成



アプリタイプを選択します。
「ユーザーにFacebookアカウントでのログインを許可する」を選択して次に進みます。

アプリタイプの選択
アプリタイプの選択



左メニューの「設定」の「ベーシック」をクリックします。
「アプリID」と「app secret」の値をコピーして保存して下さい。

マイアプリ設定
マイアプリ設定



「設定」の「ベーシック」の下部にある「プラットフォームを追加」をクリックします。

プラットフォームを追加
プラットフォームを追加



「Website」を選択して「次へ」をクリックします。

Websiteを選択
Websiteを選択



サイトURLにhttp://localhost:8000/と入力して保存します。

サイトURL追加
サイトURL追加



ダッシュボードの「ユースケース」をクリックします。

ユースケースをクリック
ユースケースをクリック



認証とアカウント作成の「編集」をクリックします。

認証とアカウント作成
認証とアカウント作成



emailの「追加」をクリックして「テスト準備完了」にします。

emailをテスト準備完了
emailをテスト準備完了



ユースケースの「追加のFacebookユーザーデータをパーソナライゼーションに使用」の「追加」をクリックし、「user_link」と「user_photos」を追加します。

2つ追加
2つ追加



テスト申請には2週間ほどかかるようですが、Facebookログイン機能を試すには問題ありません。


「プライバシーポリシーのURL」に「http://licalhost:8000/」と入力して保存します。

プライバシーポリシーのURL
プライバシーポリシーのURL



「social-auth-app-django」をインストールします。
コマンド
pip install social-auth-app-django==4.0.0

social-auth-app-djangoインストール
social-auth-app-djangoインストール



「requirements.txt」ファイルを作成し、内容を確認します。
コマンド
pip freeze > requirements.txt


内容確認 【Desktop/crowdsource/requirements.txt】

asgiref==3.7.2
beautifulsoup4==4.12.2
certifi==2023.7.22
cffi==1.15.1
charset-normalizer==3.2.0
cryptography==41.0.3
defusedxml==0.7.1
Django==3.2.20
django-bootstrap4==2.3.1
idna==3.4
oauthlib==3.2.2
pycparser==2.21
PyJWT==2.8.0
python3-openid==3.2.0
pytz==2023.3
requests==2.31.0
requests-oauthlib==1.3.1
six==1.16.0
social-auth-app-django==4.0.0
social-auth-core==4.4.2
soupsieve==2.5
sqlparse==0.4.4
typing_extensions==4.7.1
urllib3==2.0.4



「crowdsource/settings.py」ファイルに記述を追加します。


記述追加 【Desktop/crowdsource/crowdsource/settings.py】42行目

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',
    'bootstrap4', 
    'social_django', #追加
]



マイグレーションを適用します。
コマンド
python manage.py migrate

マイグレーションファイル適用
マイグレーションファイル適用



「crowdsource/settings.py」ファイルに記述を追加します。


記述追加 【Desktop/crowdsource/crowdsource/settings.py】68,69行目

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', #追加
            ],
        },
    },
]



「SOCIAL_AUTH_FACEBOOK_KEY」には先ほど設定したFacebookアプリIDを、「SOCIAL_AUTH_FACEBOOK_SECRET」にはapp secretを入力してください。
記述追加 【Desktop/crowdsource/crowdsource/settings.py】136行目

AUTHENTICATION_BACKENDS = (
    'social_core.backends.facebook.FacebookOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

SOCIAL_AUTH_FACEBOOK_KEY = "ご自分のFacebookアプリIDを入力"
SOCIAL_AUTH_FACEBOOK_SECRET = "ご自分のapp secretを入力"
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id, name, email'
}



「rowdsource/urls.py」ファイルに記述を追加します。


記述追加 【Desktop/crowdsource/crowdsource/urls.py】2, 8行目

from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from core import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('oauth/', include('social_django.urls', namespace='social')),
    path('', views.home),

    path('sign-in/', auth_views.LoginView.as_view(template_name="sign_in.html")),
    path('sign-out/', auth_views.LogoutView.as_view(next_page="/")),
    path('sign-up/', views.sign_up),

    path('customer/', views.customer_page),
    path('courier/', views.courier_page),

]



「core/templates/sign_in.html」ファイルを編集します。


記述編集 【Desktop/crowdsource/core/templates/sign_in.html】

{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}

<div class="container-fluid mt-5">
    <div class="row justify-content-center">
        <div class="col-lg-4">
            <div class="card">
                <div class="card-header bg-info text-light">
                    <div class="text-center pt-2">
                        <h4>
                        {% if request.GET.next != '/courier/' %}
                        依頼人
                        {% else %}
                        配達人
                        {% endif %}
                        </h4>
                        
                    </div>
                </div>
                <div class="card-body">
                    <form method="POST">
                        {% csrf_token %}
                        {% bootstrap_form_errors form %}
                        {% bootstrap_label "メールアドレス" %}
                        {% bootstrap_field form.username show_label=False placeholder="メールアドレス" %}
                        {% bootstrap_label "パスワード" %}
                        {% bootstrap_field form.password show_label=False placeholder="パスワード" %}
                        <button class="btn btn-info btn-block">
                            サインイン
                        </button>
                        <p class="text-center mt-3">
                            登録がお済みでない方<a href="/sign-up/?next={{ request.GET.next }}"><span class="btn btn-outline-success btn-sm ml-2">新規登録</span></a>
                        </p>
                        <hr/>
                        <a href="{% url 'social:begin' 'facebook' %}?next={{ request.GET.next }}" 
                            class="btn btn-outline-primary btn-block">Facebookでログイン</a>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}



「core/templates/sign_up.html」ファイルを編集します。


記述編集 【Desktop/crowdsource/core/templates/sign_up.html】

{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="container-fluid mt-5">
    <div class="row justify-content-center">
        <div class="col-lg-4">
            <div class="card">
                <div class="card-header bg-primary text-light">
                    <div class="text-center pt-2">
                        <h4>
                        {% if request.GET.next != '/courier/' %}
                        依頼人 | 新規ユーザ登録
                        {% else %}
                        配達人 | 新規ユーザ登録
                        {% endif %}
                        </h4>
                        
                    </div>
                </div>
                <div class="card-body">
                    <form method="POST">
                        {% csrf_token %}
                        {% bootstrap_form form %}
                        <button type="submit" class="btn btn-primary btn-block">
                            新規ユーザ登録
                        </button>
                        <p class="text-center mt-3">
                            登録がお済みの方<a href="/sign-in/?next={{ request.GET.next }}"><span class="btn btn-outline-success btn-sm ml-2">ログイン</span></a>
                        </p>
                        <hr/>
                        <a href="{% url 'social:begin' 'facebook' %}?next={{ request.GET.next }}" 
                            class="btn btn-outline-primary btn-block">Facebookでログイン</a>         
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}



「core/views.py」ファイルを編集します。


記述編集 【Desktop/crowdsource/core/views.py】32行目

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

from . import forms

# Create your views here.
def home(request):
    return render(request, 'home.html')

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

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

def sign_up(request):
    form = forms.SignUpForm()

    if request.method == 'POST':
        form = forms.SignUpForm(request.POST)

        if form.is_valid():
            email = form.cleaned_data.get('email').lower()

            user = form.save(commit=False)
            user.username = email
            user.save()

            login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            return redirect('/')


    return render(request, 'sign_up.html', {
        'form': form
    })



以前はこれでログイン確認もできたのですが、Facebookが完全https化してしまったので、このままではログイン確認ができません。
一度サーバーを起動しなおします。
サーバ再起動
HTTPS=on python manage.py runserver 0.0.0.0:8003


以下のアドレスをブラウザに入力します。
http://localhost:8003/


Facebookで新規登録します。

Facebook新規登録
Facebook新規登録



サイトにアクセスできませんと出ますので、アドレスの「https」の「s」を削除してエンターします。
http://localhost:8003/oauth/complete/facebook/?granted_sc・・・・・


これでログインを確認することができます。

↓↓クリックして頂けると励みになります。


09 | サインアップ】 << 【ホーム】 >> 【11 | Gメール