[PYTHON] J'ai des problèmes avec l'authentification Twitter de Django

Mise à jour du 02/02/2020
J'ai ajouté le paramètre suivant à la destination du lien du bouton "Connexion avec Twitter".

Préface

Utilisez social-auth-app-django

Je construis une application Web avec Django et j'ai décidé d'utiliser l'authentification Twitter pour me connecter. J'ai entendu dire que ce serait facile à utiliser social-auth-app-django, j'ai donc décidé de l'utiliser.

Il existe une documentation officielle sur l'utilisation de social-auth-app-django appelée documentation de Python Social Auth. Il existe plusieurs autres moyens simples de démarrer en recherchant sur le net (comme this).

Ce que cet article traite

Bien que social-auth-app-django soit très facile à installer, j'ai encore eu quelques difficultés à l'introduire, donc dans cet article, j'écrirai sur les parties qui m'ont dérangé.

Avant cela, vérifiez toute la procédure

Je pense qu'il est difficile de comprendre la partie qui m'a soudainement dérangé, alors jetons un coup d'œil à la procédure d'installation. Je n'expliquerai pas en détail. Si vous le connaissez, veuillez l'ignorer.

1. Créez une application pour accéder à l'API sur Twitter

Il est supposé que vous êtes enregistré en tant que développeur sur Twitter. Pour créer une application, appuyez simplement sur "Créer une application" depuis le tableau de bord (https://developer.twitter.com/en/apps) et remplissez les informations requises.

Dans mon cas, j'ai eu un problème car je ne pouvais pas créer d'application Twitter. De plus, les URL de rappel ne sont pas obligatoires, mais elles doivent être définies correctement pour utiliser l'application pour l'authentification. Les détails seront expliqués dans [** "Endroit inquiet" **](# Endroit inquiet) en bas.

En supposant que vous disposez d'une application Twitter et que les URL de rappel sont correctement définies, passez à l'étape suivante.

2. Installation du module

Il peut être installé à partir de PyPI avec pip ou pipenv.

$ pip install social-auth-app-django

3. Clé API et clé secrète API

Vous aurez besoin de votre clé API et de votre clé secrète API pour accéder à l'API Twitter. Pour vérifier, accédez aux détails de l'application que vous avez créée à partir du tableau de bord (https://developer.twitter.com/en/apps) et sélectionnez l'onglet appelé Clés et jetons. Copiez et utilisez les deux clés des clés API Consumer affichées.

Vous ne devez pas exposer ces clés, mais vous pouvez les écrire directement dans settings.py pour le développement.

settings.py


SOCIAL_AUTH_TWITTER_KEY = 'XXXXXXXXXXXXXXX'
SOCIAL_AUTH_TWITTER_SECRET = 'YYYYYYYYYYYYYY'

Si le projet est publié, il ne doit pas être inclus dans le référentiel pour pouvoir être lu localement et ailleurs. Vous devriez faire la même chose avec la variable SECRET_KEY, donc ça devrait être bien.

4. Modifier settings.py

ʻAjouter'social_django 'à INSTALLED_APPS`.

settings.py


INSTALLED_APPS = [
    ...
    'social_django',    #ajouter à
]

Ajoutez context_processors à TEMPLATES.

settings.py


TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                'social_django.context_processors.backends',        #ajouter à
                'social_django.context_processors.login_redirect',  #ajouter à
            ],
        },
    },
]

Ajoutez un espace de nom et des backends.

settings.py


# For social-auth-app-django
SOCIAL_AUTH_URL_NAMESPACE = 'social'                #ajouter à
AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',    #ajouter à
    'django.contrib.auth.backends.ModelBackend',    #ajouter à
]

5. Modifiez urls.py

Incluez'social_django.urls 'dans ʻurlspatterns`.

urls.py


urlpatterns = [
    ...
    path('', include('social_django.urls')),        #ajouter à
    path('admin/', admin.site.urls),
    ...
]

Cela vous permettra de répondre aux demandes / login / twitter /, / complete / twitter /, / disconnect / twitter /.

À propos, le document a le style d'écriture (ancien) suivant.

    url('', include('social_django.urls', namespace='social')),
  1. migrate

Après avoir configuré jusqu'à présent, migrez et mettez à jour la base de données. Un tableau est ajouté qui associe votre compte Twitter à votre compte Django.

$ python manage.py makemigrations social_django
$ python manage.py migrate

7. Créez une page de connexion

Quand j'ai regardé l'article qui présentait comment utiliser social-auth-app-jango sur le net, il y avait une page qui créait la page de connexion à partir de zéro et une page qui expliquait uniquement comment écrire le bouton de connexion.

J'étais un peu inquiet de ce qu'il fallait faire, je vais donc l'expliquer ci-dessous.

Au fait, comment écrire un bouton est comme ça.

<button type="button" class="button"
    onclick="location.href='{% url 'social:begin' 'twitter' %}?next={{ next }}'">
Connectez-vous avec Twitter
</button>

Si vous installez cela, vous pourrez vous authentifier avec Twitter.

Où j'étais inquiet

Je vais vous expliquer ce que j'ai eu des problèmes dans les étapes ci-dessus.

Je ne peux pas créer une application Twitter

Peut-être que ceux qui se sont récemment enregistrés en tant que développeur Twitter n'ont peut-être pas ce problème. Je suis développeur depuis longtemps, et quand j'ai essayé de créer une application pour Django, on m'a dit de postuler à nouveau en tant que développeur.

Lorsque j'ai postulé selon les instructions, la page suivante était affichée.

Je pensais que je devrais pouvoir faire une demande avec cela, mais après avoir rempli les éléments nécessaires et lu les notes, j'ai pensé que c'était la fin, et cet écran s'est affiché.

Cause

J'ai pu le résoudre en me référant à cette page.

En conclusion, dans mon cas, une fois que j'ai défini le numéro de téléphone dans mon compte Twitter, j'ai pu créer une application. Je ne savais pas où définir le numéro de téléphone au début, alors je l'ai noté. Au lieu du tableau de bord du développeur, je pouvais normalement le définir à partir de la page d'accueil de Twitter sous "Paramètres et confidentialité"> "Comptes".

Callback URLs

Lorsque j'ai installé le bouton «Connexion avec Twitter» et vérifié l'opération pour la première fois, j'ai eu une erreur 403. La cause était la configuration des URL de rappel du côté de l'application Twitter.

Il a été écrit correctement dans cette page auquel j'ai fait référence dans l'introduction, mais au début, je regardais d'autres pages, donc Les URL de rappel étaient incorrectes. Cela dépend des paramètres, c'est donc une bonne idée de vérifier urls.py dans votre environnement.

Si vous le définissez en suivant les étapes ci-dessus dans cet article, l'URL suivante semble correcte.

--Lors de l'exécution locale - http://127.0.0.1:8000/complete/twitter/

Que faire avec la page de connexion

Sur la première page à laquelle j'ai fait référence, j'ai créé une page de connexion / déconnexion à partir de zéro, et également créé une application pour cela (application dans le projet Django). Je me suis demandé si j'avais besoin de faire ça, mais ce n'était pas le cas. Collez simplement le bouton que vous avez écrit dans ** "7. Créez une page de connexion" ** ci-dessus sur votre page de connexion existante.

Bien sûr, si vous souhaitez créer une page spéciale pour vous connecter avec l'authentification Twitter, vous pouvez le faire. Étant donné que mon projet n'a pas de fonction d'inscription, je me suis connecté uniquement avec l'authentification Twitter et j'ai supprimé (commenté) le formulaire d'origine du modèle de page de connexion.

Réécriture de modèles

La plupart des modèles de page de connexion / déconnexion se trouvent dans le dossier «templates / registration /». En fait, cela dépend du projet, alors trouvez le modèle utilisé dans ce projet et modifiez-le.

Comme ça, j'ai remplacé le formulaire d'origine par un seul bouton.

login.html


    ...
    <div align="center">
        <button type="button" class="button"
        onclick="location.href='{% url 'social:begin' 'twitter' %}?next={{ next }}'">
Connectez-vous avec Twitter</button>
    </div>
    
    <!--
    <div align="center">
        <form method="post" action="{% url 'login' %}">
            {% csrf_token %}
            <table>
                {{ form.as_table }}
            </table>
            <div>&nbsp;</div>
            <input type="submit" class="button" value="Login"/>
            <input type="hidden" name="next" value="{{ next }}"/>
        </form>
    </div>
    -->
    ...

Page de connexion affichée Si vous ne mettez pas en commentaire le formulaire original, vous pouvez coexister avec le bouton "Se connecter avec Twitter". La page de déconnexion n'a pas besoin d'être modifiée.

Pour vous connecter en tant qu'administrateur

Dans l'exemple ci-dessus, vous ne pouvez pas vous connecter avec un mot de passe, mais si vous souhaitez vous connecter en tant qu'administrateur, allez dans'Service Root / admin / 'et la page de connexion de l'administrateur s'ouvrira.

Cependant, comme j'utilise généralement la même page de déconnexion, je pense que même si je me déconnecte en tant qu'administrateur et que j'appuie sur le lien "Se reconnecter", j'irai dans "Se connecter avec Twitter". Je le laisse tel quel car la page d'administration devrait être difficile d'accès.

Recommended Posts

J'ai des problèmes avec l'authentification Twitter de Django
J'ai des problèmes avec les variables d'instance héritées en Python
Avez-vous des problèmes avec "pipenv.exceptions.ResolutionFailure"?
Accédez à l'API Twitter après l'authentification Oauth avec Django