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
.
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;
salt
est de 65 en raison du changement de python-social-auth
par this Issue.(server_url, timestamp, salt)
est attachée par this Issue de python-social-auth
. ..BaseStrategy.backend
a disparuLors 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 à.
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