[GO] Mettre à jour python-social-auth de 0.1.x à 0.2.x

Qu'est-ce que c'est?

Python-social-auth utilisé dans le plus grand service d'achat et de vente de billets du Japon "Ticket Camp" Ceci est un mémo de travail lors de la mise à jour de 0.1.x à 0.2.13.

Comme prémisse, je l'utilise en combinaison avec Django 1.7.x, et j'utilise social.apps.django_app.default au lieu de social.apps.django_app.me.

Changements de schéma

Normalement, vous devriez exécuter manage.py migrate de Django, mais pour diverses raisons, cela n'est pas possible, alors vérifiez les changements basés sur SQL.

Liste des tables associées.

>SHOW TABLES LIKE 'social_auth_%';
+------------------------------------------+
| Tables_in_ticketcamp_dev (social_auth_%) |
+------------------------------------------+
| social_auth_association                  |
| social_auth_code                         |
| social_auth_nonce                        |
| social_auth_usersocialauth               |
+------------------------------------------+

Le schéma 0.1.x que vous utilisez actuellement.

CREATE TABLE `social_auth_association` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `server_url` varchar(255) NOT NULL,
  `handle` varchar(255) NOT NULL,
  `secret` varchar(255) NOT NULL,
  `issued` int(11) NOT NULL,
  `lifetime` int(11) NOT NULL,
  `assoc_type` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `social_auth_code` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(75) NOT NULL,
  `code` varchar(32) NOT NULL,
  `verified` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`,`code`),
  KEY `social_auth_code_09bb5fb3` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `social_auth_nonce` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `server_url` varchar(255) NOT NULL,
  `timestamp` int(11) NOT NULL,
  `salt` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `social_auth_usersocialauth` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `provider` varchar(32) NOT NULL,
  `uid` varchar(255) NOT NULL,
  `extra_data` longtext NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `provider` (`provider`,`uid`),
  KEY `social_auth_usersocialauth_6340c63c` (`user_id`),
  CONSTRAINT `user_id_refs_id_c8898d4c` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Le dernier schéma de la version 0.2.13.

CREATE TABLE `social_auth_association` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `server_url` varchar(255) NOT NULL,
  `handle` varchar(255) NOT NULL,
  `secret` varchar(255) NOT NULL,
  `issued` int(11) NOT NULL,
  `lifetime` int(11) NOT NULL,
  `assoc_type` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `social_auth_code` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(254) NOT NULL,
  `code` varchar(32) NOT NULL,
  `verified` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `social_auth_code_email_801b2d02_uniq` (`email`,`code`),
  KEY `social_auth_code_c1336794` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `social_auth_nonce` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `server_url` varchar(255) NOT NULL,
  `timestamp` int(11) NOT NULL,
  `salt` varchar(65) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `social_auth_nonce_server_url_f6284463_uniq` (`server_url`,`timestamp`,`salt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `social_auth_usersocialauth` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `provider` varchar(32) NOT NULL,
  `uid` varchar(255) NOT NULL,
  `extra_data` longtext NOT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `social_auth_usersocialauth_provider_e6b5e668_uniq` (`provider`,`uid`),
  KEY `social_auth_usersocialauth_user_id_17d28448_fk_auth_user_id` (`user_id`),
  CONSTRAINT `social_auth_usersocialauth_user_id_17d28448_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

À l'exception de la différence entre la clé d'index et l'ordre des colonnes

--- 0.1.sql     2015-12-12 06:36:39.164810101 +0000
+++ 0.2.sql     2015-12-12 06:36:18.612810595 +0000
@@ -11,7 +11,7 @@

 CREATE TABLE `social_auth_code` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
-  `email` varchar(75) NOT NULL,
+  `email` varchar(254) NOT NULL,
   `code` varchar(32) NOT NULL,
   `verified` tinyint(1) NOT NULL,
   PRIMARY KEY (`id`),
@@ -23,8 +23,9 @@
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `server_url` varchar(255) NOT NULL,
   `timestamp` int(11) NOT NULL,
-  `salt` varchar(40) NOT NULL,
-  PRIMARY KEY (`id`)
+  `salt` varchar(65) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `social_auth_nonce_server_url_f6284463_uniq` (`server_url`,`timestamp`,`salt`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 CREATE TABLE `social_auth_usersocialauth` (
@@ -38,4 +39,3 @@
   KEY `social_auth_usersocialauth_6340c63c` (`user_id`),
   CONSTRAINT `user_id_refs_id_c8898d4c` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Modifications incompatibles

La propriété BaseStrategy.backend a disparu

Lors de la mise à niveau vers la version 0.2, [la refactorisation pour éviter la référence circulaire de «stratégie» et «backend» a été incluse](https://github.com/omab/python-social-auth/commit/7a21ae5626b73a6409f6f5c7ed58a1416adc55af#diff -edfca398eb84334baeba76ce424a2611), vous ne pouvez donc plus y faire référence comme strategy.backend dans le pipeline.

Alors

from django.shortcuts import redirect
from social.pipeline.partial import partial

@partial
def my_pipeline(strategy, user=None, *args, **kwargs):
  if user:
      return

  return redirect('next_action', strategy.backend.name)

Code comme

from django.shortcuts import redirect
from social.pipeline.partial import partial

@partial
def my_pipeline(strategy, user=None, *args, **kwargs):
  if user:
      return

  backend = kwargs.get('backend')
  if not backend:
      return

  return redirect('next_action', backend.name)

Fixé pour ressembler à.

finalement

Pour le moment, je suis allé au point où je pouvais m'inscrire et me connecter en tant que membre avec la version 0.2.13, mais j'ai bien peur de ne pas pouvoir le mettre dans l'environnement de production sans ajouter un peu plus de tests unitaires.

Recommended Posts

Mettre à jour python-social-auth de 0.1.x à 0.2.x
Mettre à jour Mac Python de 2 à 3
Comment mettre à jour Google Sheets à partir de Python
Somme de 1 à 10
4 façons de mettre à jour les différences entre les feuilles de calcul et BigQuery
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Comment mettre à jour easy_install
Transition de WSL1 à WSL2
mettre à jour django version 1.11.1 vers 2.2
De l'édition à l'exécution
Publier de Python vers Slack
Flirter de PHP à Python
Portage d'Argparse à Hydra
Transition de Chainer v1 à Chainer v2
Comment mettre à jour Tkinter de Python vers la version 8.6
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Migré de Flask-RESTPlus vers Flask-RESTX
étapes de migration de python-social-auth v0.2 à v0.3
Mettez à jour le python que vous aviez sur votre Mac à 3.7-> 3.8
Migrer de requirements.txt vers pipenv
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Météorologie x Python ~ De l'acquisition de données météorologiques à l'analyse spectrale ~
Convertir le code python 3.x en python 2.x
Mise à jour vers OS X 10.9 Mavericks et relance de PIL pour GAE
Appelez Matlab depuis Python pour optimiser
De l'installation d'Elasticsearch à la saisie des données
Résumé de vtkOpenFOAMReader (mis à jour de temps en temps)
Comment utiliser SWIG de WAF
Impossible de migrer de direct_to_template vers TemplateView
Livre de mots de l'ingénieur (mis à jour de temps en temps)
Conversion de pdf en txt 1 [pdfminer]
Programmation tirée des livres le 10 mai
Publication de Python sur la chronologie Facebook
Comment mettre à jour Spyder dans Anaconda
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Sortie du Raspberry Pi vers la ligne
[Introduction] De l'installation de kibana au démarrage
Conversion de pdf en txt 2 [pyocr]
Connectez-vous à la base de données utf8mb4 à partir de python
Installation d'OpenMPI Du téléchargement au passage
Mémo Tensorflow [mis à jour de temps à autre]
Python (de la première fois à l'exécution)
Publier une image de Python sur Tumblr
Envoyer des commandes d'Atom à Maya
Comment lancer Explorer à partir de WSL
Programmation tirée des livres le 7 mai
De Ubuntu 20.04 introduction à la construction d'environnement
Connexion SSH de Windows à GCP
Mettre à jour les applications exécutées sur Django 1.7 vers Django 1.8
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Comment convertir .mgz en .nii.gz
Migrer de VS Code vers PyCharm
pynq-z1 De l'achat au contrôle de fonctionnement
N'a pas changé de Python 2 à 3
Pour la première fois dans Numpy, je vais le mettre à jour de temps en temps