Django使用Social-Auth实现微信第三方网站扫码登录的方法介绍
前言
之前让网页公司制作新官网的时候规划有第三方账号
的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能。
由于是刚接触<a href="http://www.php.cn/wiki/1514.html" target="_blank">Python</a>
和<a href="http://www.php.cn/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="http://www.php.cn/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="http://www.php.cn/wiki/1275.html" target="_blank">dir</a>ect_uri 参数错误
!
实操步骤
-
安装
social-auth
:
由于官网使用的是python-social-auth==0.2.12
,下载源码回来之后,发现在social-backends
里也是有Weixin.py
的,证明可用;pip install python-social-auth==0.2.12
登录后复制 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', )
登录后复制 -
微信开放平台应用
APPID
与SECRET
的配置: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="http://www.php.cn/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
参数即可,修改后如下:
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
修改保存后,再重新运行工程,再次访问 www.域名.com/login/weixin 即可看到效果了!
以上是Django使用Social-Auth实现微信第三方网站扫码登录的方法介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

VS Code 可用于编写 Python,并提供许多功能,使其成为开发 Python 应用程序的理想工具。它允许用户:安装 Python 扩展,以获得代码补全、语法高亮和调试等功能。使用调试器逐步跟踪代码,查找和修复错误。集成 Git,进行版本控制。使用代码格式化工具,保持代码一致性。使用 Linting 工具,提前发现潜在问题。

在 Notepad 中运行 Python 代码需要安装 Python 可执行文件和 NppExec 插件。安装 Python 并为其添加 PATH 后,在 NppExec 插件中配置命令为“python”、参数为“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通过快捷键“F6”运行 Python 代码。

在 VS Code 中,可以通过以下步骤在终端运行程序:准备代码和打开集成终端确保代码目录与终端工作目录一致根据编程语言选择运行命令(如 Python 的 python your_file_name.py)检查是否成功运行并解决错误利用调试器提升调试效率
