ホームページ >バックエンド開発 >Python チュートリアル >Django がソーシャル認証を使用して WeChat サードパーティ Web サイトに QR コード ログインを実装する方法の紹介

Django がソーシャル認証を使用して WeChat サードパーティ Web サイトに QR コード ログインを実装する方法の紹介

高洛峰
高洛峰オリジナル
2017-03-16 15:50:023904ブラウズ

はじめに

新しい公式ウェブサイトの作成をウェブ会社に依頼した際、サードパーティ アカウントによるログイン機能を予定していましたが、一部のオープン プラットフォームでは申請手続きが煩雑でした。当時(特に WeChat オープンプラットフォーム)、私は先延ばしにし続け、最近では関連機能を自分で追加することしかできませんでした。 第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能。

由于是刚接触<a href="//m.sbmmt.com/wiki/1514.html" target="_blank">Python</a><a href="//m.sbmmt.com/wiki/1515.html" target="_blank">Django</a>,期间找了好多视频和资料学习练习,才慢慢把MVT结构什么的弄明白了,第三方登录方面百度找到了两篇很有用的文章,也从中学习到了很多:

1. python实现微信第三方网站扫码登录(Django)
2. 用django-social-auth 做中国社交网站三方登录(QQ,微博,豆瓣,百度,人人,微信)

在实现QQ、微博的登录时就深刻体会到使用social-auth来实现第三方登录是非常简单方便、直接而且完美的,然而却一直没有找到微信怎么也同样来实现(上面第二篇文章也一样没有提及);从social-auth的解读文档里也愣是没找到Weixin的内容,由于官网已经有相应的User数据表以及存储第三方的UserSocialAuth数据格,非常规范,在使用上面第一种方法实现之后却苦恼于用户数据表的添加和修改,真心不想破坏那种结构,就在重拾social-auth想学习一下数据库存储方式的时候,竟然在social-back<a href="//m.sbmmt.com/wiki/1048.html" target="_blank">end</a>s里发现了Weixin.py,那不就说明能支持微信么?

注意事项

  • 微信开放平台申请及开通需要提交很多认证资料,也需要缴纳¥300每年的认证费用;与公众号、服务号等不一样哦。地址:http://open.weixin.qq.com

  • 认证通过后,添加相应的网页应用,注意授权回调域的填写,写网站的主域名即可,比如说不能写www.zzmxy.com/login/wechat之类的,只需要写www.zzmxy.com 即可(不需要添加http或者https),不然后期都是re<a href="//m.sbmmt.com/wiki/1275.html" target="_blank">dir</a>ect_uri 参数错误!

实操步骤

  1. 安装social-auth
    由于官网使用的是python-social-auth==0.2.12,下载源码回来之后,发现在social-backends里也是有Weixin.py的,证明可用;

    pip install python-social-auth==0.2.12
  2. social-auth配置:

  • SOCIAL_AUTH_PIPELINE配置:请参考上面提及的第二篇文章的书写;

  • 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',
       )
  • 微信开放平台应用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
  • 配置完之后,运行你的网站,使用 www.域名.com/login/weixin 访问即可打开相应的页面了,但有没有发现出现错误了:Scope参数错误或没有Scope权限,实际操作过程中,我发现social-auth自动生成的二维码访问链接里,是少了一个scope参数,而微信官方给的二维码访问链接是这样的:

    https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    如上需要的参数为5个,state可省略,但scope则是必需的,而对于网页授权的访问,scope作用域参数为固定值scope=sns<a href="//m.sbmmt.com/js/js-weixinapp-api.html" target="_blank">api</a>_login,这样的话,我们就需要在social-auth的源代码上,把这个参数值给加上,根据你实际的site-packages安装路径,找到/social/backends/weixin.py文件,如我使用VirtualEnv建的路径是:

    /home/ubuntu/env/mppython/lib/python2.7/site-packages/social/backends/weixin.py

    打开这个文件,找到里面def auth_params()这一段内容(原文):

    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

    params字典里,添加一个scope

    私は <a href="//m.sbmmt.com/wiki/1514.html" target="_blank">Python</a> を初めて使用するため、 Django を見つけました。ビデオと学習教材練習し、MVT 構造 などをゆっくりと理解しました。Baidu は、サードパーティのログインに関する 2 つの非常に役立つ記事を見つけて、そこから多くのことを学びました。 1. Python は WeChat サードパーティ Web サイトのスキャン コード ログイン (Django) を実装します。
    2. django-social-auth を使用して中国のソーシャル ネットワーキング サイト (QQ、Weibo、Douban、Baidu、Renren、WeChat) にログインします。 )

    が実装されています QQ と Weibo にログインするとき、social-auth を使用してサードパーティ ログインを実現するのは非常に簡単、便利、直接的で完璧であることを深く認識しました。 WeChat を見つけました。同じ方法で実装する方法 (上の 2 番目の記事でも言及されていませんでした)。Weixin のコンテンツは social-auth の解釈ドキュメントに見つかりませんでした。公式 Web サイトにはすでに対応する User データ テーブルとサードパーティの UserSocialAuth データ グリッドが非常に標準化されているため、上記の最初の方法を使用して実装した後、 social-auth に戻ってデータベースを保存する方法を学びたかったときに、ユーザー データ テーブルの追加と変更に苦労しました。 、social-back<a href="//m.sbmmt.com/%20wiki/1048.html" target="_blank">end</a>s で見つけました Weixin.py ということは、WeChat をサポートできるということではないでしょうか?
  • メモ

    🎜
      🎜WeChat オープン プラットフォーム 申請とアクティベーションには、多くの認証情報の提出と、目標金額の \300 年間認証料金は公式アカウントやサービスアカウントなどとは異なります。アドレス: http://open.weixin.qq.com🎜🎜
    • 🎜 認定に合格したら、対応する Web アプリケーションを追加し、承認コールバック ドメイン の入力に注意して、 Web サイトのメイン ドメイン名。たとえば、www.zzmxy.com/login/wechat と書くことはできません。www.zzmxy.com のみを書く必要があります (いいえ) http または https) を追加する必要があります。そうしないと、後続の問題はすべて re<a href="//m.sbmmt.com/wiki/1275.html" target="_blank">ディレクトリ</a>になります。 ect_uri パラメータ エラー!🎜 🎜
    🎜🎜実践的な手順🎜🎜
    1. 🎜インストールsocial-auth:
      公式 Web サイトでは python-social-auth を使用しているため==0.2.12、ソース コードをダウンロードした後、social-backends にも Weixin.py があることがわかりました。これは、それが利用可能であることを証明しています。 ; 🎜
      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
      🎜
    2. 🎜social-auth 構成: 🎜🎜
      • 🎜SOCIAL_AUTH_PIPELINE構成: を参照してください。上記の 2 番目の記事の執筆に 🎜🎜🎜AUTHENTICATION_BACKENDS 設定: 🎜rrreee🎜
      • 🎜WeChat オープン プラットフォーム アプリケーション APPIDSECRET 設定: 🎜rrreee🎜
    3. 🎜 設定後、Web サイトを実行し、www.domain name.com/login/weixin を使用してアクセスして対応するページを開きますが、エラーは見つかりましたか: Scope パラメータが間違っているか、Scope 権限がありません。実際の操作中に、social-auth によって自動的に生成された QR コード アクセス リンクに が欠落していることがわかりました。 scope パラメータ、および WeChat 公式 指定された QR コード アクセス リンクは次のとおりです: 🎜rrreee🎜上記の必須パラメータは 5 です。state は省略できますが、scope は必須であり、Web ページの承認されたアクセスの場合、scope スコープ パラメータは固定値ですscope=sns<a href="//m.sbmmt.com/js/js-%20weixinapp-api.html" target="_blank">api</a>_login、この場合、このパラメータ値を social-auth のソース コードに追加する必要があります。実際の site-packages インストール パスに従って、/social/backends/weixin.py ファイルを見つけます。たとえば、VirtualEnv を使用して作成したパスです。 code> は: 🎜rrreee🎜 このファイルを開いて、<code>def auth_params() の内容を見つけます (元のテキスト): 🎜rrreee🎜 params 辞書に、 を追加します>scope パラメーター 以上です。変更は次のとおりです: 🎜rrreee🎜 変更を保存した後、プロジェクトを再実行し、再度 www.domain name.com/login/weixin にアクセスして効果を確認してください。 🎜🎜🎜🎜🎜

    以上がDjango がソーシャル認証を使用して WeChat サードパーティ Web サイトに QR コード ログインを実装する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。