前言

之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能。

由于是刚接触PythonDjango,期间找了好多视频和资料学习练习,才慢慢把MVT结构什么的弄明白了,第三方登录方面百度找到了两篇很有用的文章,也从中学习到了很多:

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

在实现QQ、微博的登录时就深刻体会到使用social-auth来实现第三方登录是非常简单方便、直接而且完美的,只需要添加配置内容,一句代码都不需要写,真的是一句处理的代码都不需要写哦!
然而却一直没有找到微信怎么也同样来实现(上面第二篇文章虽然标题有,但文章内却压根没有提及);从social-auth的解读文档里也愣是没找到Weixin的内容,由于官网已经有相应的User数据表以及存储第三方的UserSocialAuth数据格,非常规范,在使用上面第一种方法实现之后却苦恼于用户数据表的添加和修改,真心不想破坏那种结构,就在重拾social-auth想学习一下数据库存储方式的时候,竟然在social-backends里发现了Weixin.py,那不就说明能支持微信么?

注意事项

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

  • 认证通过后,添加相应的网页应用,注意授权回调域的填写,写网站的主域名即可,比如说不能写www.zzmxy.com/login/wechat之类的,只需要写www.zzmxy.com 即可(不需要添加http或者https),不然后期都是redirect_uri 参数错误!

实操步骤

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

    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
  3. 配置完之后,运行你的网站,使用 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=snsapi_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'] = stateif self.RESPONSE_TYPE:params['response_type'] = self.RESPONSE_TYPEreturn params

    params字典里,添加一个scope参数即可,修改后如下:

    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'] = stateif self.RESPONSE_TYPE:params['response_type'] = self.RESPONSE_TYPEreturn params

    修改保存后,再重新运行工程,再次访问 www.域名.com/login/weixin 即可看到效果了!

后记

本文的内容是在《用django-social-auth 做中国社交网站三方登录(QQ,微博,豆瓣,百度,人人,微信)》基础上扩展的,有些地方并没有细化或者深入说明(比如说urls的配置等),如果看不太明白的朋友,请转到上述文章查找相关的信息或者留言交流,谢谢!

Django使用Social-Auth实现微信第三方网站扫码登录相关推荐

  1. Django实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  2. 手把手教程用Java实现微信公众号扫码登录功能

    文章目录 前言 一.环境准备 二.使用步骤 1. 使用微信工具包 2. 创建数据表 3. 登录页面代码逻辑 4. 验证微信公众号登录 总结 前言 微信现今是我们必不可少的社交工具了,围绕微信这个生态实 ...

  3. 实现支持多公众号的微信公众号扫码登录服务

    实现支持多公众号的微信公众号扫码登录服务 最近,在公司的通行证项目开发过程中,需求方提出了支持微信公众号扫码登录,并且可以支持多公众号接入的需求.研究了一下微信公众号的开发文档,实现微信公众号扫码登录 ...

  4. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  5. 使用微信小程序扫码登录系统PC端web的功能

    1.项目说明: 项目PC端(vue单页面应用,前后端分离).移动端(微信小程序)共用同一Java Springboot服务.小程序可以直接获取微信手机号登录,不需要密码,因为系统黙认密码是随机的,因此 ...

  6. [微信] 微信网页版扫码登录的实现

    我们先来回顾一下微信网页版的扫码登录过程 1. 打开微信网页版,https://wx.qq.com/ 2. 打开手机微信客户端,扫一扫 3. 点击确定,登录 看似简单的操作流程,中间涉及的数据交互有很 ...

  7. 微信公众号扫码登录 提示 网络出错了, 轻触屏幕重新加载-1001错误

    iphone 手机扫码或者密码登录, 使用WiFi或者4G扫码 登录微信公众号都提示1001错误 出现问题的场景:调用微信网页授权https://open.weixin.qq.com/connect/ ...

  8. Java实现微信公众号扫码登录

    前言 1.首先,调用微信公众平台的OAuth2.0授权接口,获取用户的授权信息.具体的,在用户点击授权登录按钮时,向微信服务器发送请求,微信服务器会返回一个授权链接,用户点击授权链接后,微信服务器会跳 ...

  9. PC网站如何实现微信扫码登录

    不管你运营什么类型的网站,用户注册都是很重要的一个环节,用户注册的方式也是很多的,比如邮箱注册.手机号注册.第三方授权登录等.其中,第三方授权登录是最常用的一种方式,微信扫码登录是其中的一种,但是微信 ...

最新文章

  1. C# (逻辑与) ||(逻辑或)优先级辨析
  2. Django(part46)--form表单验证
  3. 使用C语言----修改密码
  4. 99+好友共同关注,公众号推荐
  5. 实时音视频聊天中的延时问题一篇就够
  6. SAP License:HP面试手记
  7. sleep期间读取所有_java并发学习第四弹:走进JDK源码去了解sleep和join
  8. 递归法:快速掌握递归核心方法
  9. 二叉树的创建及遍历--java实现
  10. 万稞pw80线切割编程软件_Sodick 沙迪克慢走丝线切割机床,工件摆斜不校边加工步骤...
  11. 三大邮箱品牌:网易,腾讯,阿里说明
  12. 空调冷凝水管径选用原则
  13. R数据框操作 fourth day
  14. java科学计算器代码_用JAVA编写的科学计算器源代码是什么?
  15. MyBatis中达到where a and (b or c)形式
  16. c语言报告对老师的致谢,论文对老师的致谢
  17. 【学校实验】编码实现一个地址簿类(AddressBook),通过getAllInfo()输出,实现另一个类(TestAddressBook)该类存有主方法
  18. Mac xmind 8完美破解教程
  19. 思科、华为、瞻博juniper、中兴、阿尔卡特中高端网络设备查看端口收发光功率-命令汇总
  20. 计算机培训报名表 自我介绍,单招报名表自我介绍

热门文章

  1. Android客户端与服务器之间的通信
  2. 特斯拉的三季度:车卖很多、车主很烦、股价很魔幻
  3. 哈佛最新成果:温度高于25℃可降低新冠病毒传染率,但不足以完全控制疫情...
  4. 何恺明团队新作:图像分割精细度空前,边缘自带抗锯齿,算力仅需Mask R-CNN的2.6%...
  5. 15岁成杀人犯,监狱里学编程,37岁获释后年薪70万
  6. 打好网约车“安全牌”,T3出行以人、车、路保障
  7. AI之父图灵登上50英镑钞票,荣耀比肩牛顿达尔文;吴恩达:将激励更多人
  8. oracle addm报告
  9. HttpClient 中文官方教程----第一章基础知识-只收录,未测试
  10. 安装grid后启动asm报ORA-15149错误