Introduction à la façon dont Django utilise Social-Auth pour implémenter la connexion par code QR sur les sites Web tiers WeChat

高洛峰
Libérer: 2017-03-16 15:50:02
original
3853 Les gens l'ont consulté

Avant-propos

Lorsque nous avons demandé à la société Web de créer un nouveau site officiel, nous avions prévu d'avoir une 第三方账号 fonction de connexion. Cependant, en raison des étapes de candidature fastidieuses pour certains. plates-formes ouvertes à cette époque (en particulier la plate-forme ouverte WeChat), j'ai donc tergiversé et récemment, je ne peux ajouter que des fonctions associées moi-même.

Depuis que j'étais nouveau sur <a href="http://www.php.cn/wiki/1514.html" target="_blank">Python</a> et <a href="http://www.php.cn/wiki/1515.html" target="_blank">Django</a>, j'ai trouvé beaucoup de vidéos et de matériel pour étudier pratiquer, puis j'ai lentement maîtrisé MVT结构 et ainsi de suite. J'ai compris, Baidu a trouvé deux articles très utiles sur la connexion par des tiers et en a beaucoup appris :

1 Python implémente la connexion par code d'analyse de sites Web tiers (Django) 2. Utilisez django -social-auth pour la connexion à trois sur les sites de réseaux sociaux chinois (QQ, Weibo, Douban, Baidu, Renren, WeChat)

En me connectant à QQ et Weibo, j'ai profondément réalisé le l'utilisation de

Connexion tierce est très simple, pratique, directe et parfaite. Cependant, je n'ai jamais trouvé comment implémenter social-auth de la même manière (le deuxième article ci-dessus ne l'a pas non plus mentionné d'après l'interprétation) ; document de 微信, j'ai été abasourdi. Le contenu de Weixin n'a pas été trouvé. Puisque le site officiel dispose déjà du tableau de données social-auth correspondant et de la grille de données User pour le stockage des tiers, il est très standardisé. la première méthode ci-dessus pour l'implémenter, j'ai eu du mal à ajouter et à modifier la table de données utilisateur, je ne veux vraiment pas détruire cette structure, alors juste au moment où je voulais réapprendre à stocker des bases de données, j'ai trouvé social-back<a href="http://www.php.cn/wiki/1048%20.html" target="_blank">end<code>UserSocialAuths trouvé social-auth, ça ne veut pas dire ça peut-il prendre en charge WeChat ? social-back<a href="http://www.php.cn/wiki/1048.html" target="_blank">end</a>sWeixin.py

Remarques

  • La demande et l'activation nécessitent la soumission de nombreuses informations de certification et des frais de ¥

    300微信开放平台Frais de certification annuels différents des comptes officiels, comptes de service, etc. Adresse : http://open.weixin.qq.com

  • Après avoir passé la certification, ajoutez l'application web correspondante Faites attention à remplir
  • et écrivez le nom de domaine principal. du site Web. Par exemple, vous ne pouvez pas écrire

    et autres, il vous suffit d'écrire 授权回调域 (pas besoin d'ajouter http ou https), sinon les numéros suivants seront re<a href="http://www.php.cn%20/wiki/1275.html" target="_blank">dir<code>www.zzmxy.com/login/wechaterreur de paramètre ect_uri!www.zzmxy.comre<a href="http://www.php.cn/wiki/1275.html" target="_blank">dir</a>ect_uri 参数错误

Pratique étapes

  1. Installer

     : Puisque le site officiel utilise social-auth, après avoir téléchargé le code source, j'ai découvert qu'il y avait également
    dans python-social-auth==0.2.12, ce qui s'avère Disponible social-backendsWeixin.py

    pip install python-social-auth==0.2.12
    Copier après la connexion
  2. Configuration :

    social-auth

    Configuration : Merci de vous référer au deuxième mentionné ci-dessus Rédaction des articles
  • SOCIAL_AUTH_PIPELINE

  • Configuration :
  • AUTHENTICATION_BACKENDS

    AUTHENTICATION_BACKENDS = (
       'social.backends.weibo.WeiboOAuth2',      #微博的功能
       'social.backends.qq.QQOAuth2',            #QQ的功能
       'social.backends.weixin.WeixinOAuth2',    #这个是导入微信的功能
       'oscar.apps.customer.auth_backends.EmailBackend',
       'django.contrib.auth.backends.ModelBackend',
       )
    Copier après la connexion
    Configuration de WeChat ouvert ; application de plateforme
  • et
  •  :

    APPIDSECRET

    SOCIAL_AUTH_WEIBO_KEY = '53*****29'
    SOCIAL_AUTH_WEIBO_SECRET = '272152************81a8b3'
    SOCIAL_AUTH_QQ_KEY = '10*****51'
    SOCIAL_AUTH_QQ_SECRET = '5807************d15bd97'
    SOCIAL_AUTH_WEIXIN_KEY = 'wx4fb***********599'            #开放平台应用的APPID
    SOCIAL_AUTH_WEIXIN_SECRET = 'f1c17************08c0489'    #开放平台应用的SECRET
    Copier après la connexion
  • Après la configuration, exécutez votre site Web et utilisez www.domain name.com/login/weixin pour accéder au correspondant page, mais y a-t-il une erreur :
Au cours de l'opération réelle, j'ai constaté qu'il manquait un paramètre
  • dans le lien d'accès au code QR généré automatiquement par

    , et le lien d'accès au code QR est officiellement fourni. par WeChat était comme ceci de : Scope参数错误或没有Scope权限social-authscope Les paramètres requis ci-dessus sont 5,

    peut être omis, mais
    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    Copier après la connexion
    est requis, et pour l'accès autorisé aux pages Web, la portée

    le paramètre est une valeur fixe scope=sns<a href="http://www.php.cn/js/js-weixinapp-api.html" target="_blank">api<code>state_login, dans ce cas, nous devons ajouter cette valeur de paramètre au code source de scope et trouver le fichier scope en fonction de votre chemin d'installation scope=sns<a href="http://www.php.cn/js/js-weixinapp-api.html" target="_blank">api</a>_login réel. Par exemple, le chemin que j'ai créé en utilisant social-auth est. : site-packages /social/backends/weixin.pyVirtualEnvOuvrez ce fichier et retrouvez le contenu de

    à l'intérieur (texte original) :
    /home/ubuntu/env/mppython/lib/python2.7/site-packages/social/backends/weixin.py
    Copier après la connexion

    def auth_params()Dans le dictionnaire

    , ajoutez simplement un paramètre
    def auth_params(self, state=None):
        appid, secret = self.get_key_and_secret()
        params = {
            'appid': appid,
            'redirect_uri': self.get_redirect_uri(state),
        }
        if self.STATE_PARAMETER and state:
            params['state'] = state
        if self.RESPONSE_TYPE:
            params['response_type'] = self.RESPONSE_TYPE
        return params
    Copier après la connexion
    , et la modification est la suivante :

    paramsscopeAprès la modification et l'enregistrement, réexécutez le projet et visitez à nouveau www.domain name.com/login/weixin pour voir l'effet !

    def auth_params(self, state=None):
        appid, secret = self.get_key_and_secret()
        params = {
            'appid': appid,
            'redirect_uri': self.get_redirect_uri(state),
            'scope': 'snsapi_login',
        }
        if self.STATE_PARAMETER and state:
            params['state'] = state
        if self.RESPONSE_TYPE:
            params['response_type'] = self.RESPONSE_TYPE
        return params
    Copier après la connexion

  • Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Étiquettes associées:
    source:php.cn
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal