微信公众号开发小记——3.接入三方登录
admin
2023-07-31 01:45:29
0

为什么要接入三方登录

如果你的微信服务器要做复杂的逻辑,比如html5、给用户提供高级的服务,并且有很好看的页面等等,这种时候你就需要一个正常的web服务器,用户打通就需要做三方登录了。

而如果你决定直接用weixin_server做web服务器完全没有问题,80端口给微信留着,剩下的你可以按照一个正常的django项目开发,前端可以接入weixin sdk。

python-socail-auth

我接触python-social-auth已经很久了,其中微信的backend就是我贡献的代码,然而当时做的时候比较年轻,而且这个项目处于一个很大的代码重构中,借这次机会重新用正确的姿势接入了一下三方登录,可以当做一个学习接入三方的demo。顺便提了weixin app登录的backend的一个pr。

如果你想用这个weixin_server项目接入三方登录,可以参考feature/myauth分支,三方用的python-social-auth weixin app backend刚提pr不知道作者什么时候合并,如果要用先-e安装我的分之的这个版本我的python-social-auth,分支master_origin

用户信息

django默认的User信息肯定是不够用的,按照以前开发的尿性,我们需要一个UserProfile做onetoone的关联,记录额外信息。myauth/models.py

配置

参考文档配置即可,可以参考我的配置。

注意配置中SOCIAL_AUTH_通用配置 | SOCIAL_AUTH_QQ_qq的配置的是因为这个地方源码 social/utils.py的代码来做到的。

所谓的正确姿势

关键就是这些pipeline,这是所谓的正确姿势。

SOCIAL_AUTH_PIPELINE = (
    \'social.pipeline.social_auth.social_details\',
    \'social.pipeline.social_auth.social_uid\',
    \'social.pipeline.social_auth.auth_allowed\',
    \'social.pipeline.social_auth.social_user\',
    \'social.pipeline.user.get_username\',
    \'social.pipeline.user.create_user\',
    \'social.pipeline.social_auth.associate_user\',
    \'social.pipeline.social_auth.load_extra_data\',
    \'social.pipeline.user.user_details\',
    \'myauth.pipeline.user.save_profile\',
)

源码的action.py,通过do_complete方法我们可以看到,微信在做pipeline的时候是backend.continue_pipeline是一直根据配置的pipeline往下调用的,文档讲解的很清楚(比当年好多了),pipeline会暂时中断这次auth,做一些你想做的事情(用户名转化,根据微信的unioid关联唯一用户等等),然后回来继续,然而我当年是从中间某个位置直接跳转出去就不从这继续了,好吧现在用了正确的姿势,例如额外信息存储myauth.pipeline.user.save_profile

所以我的这个项目其实是错误的示范,star的同学们对不起了。

过完pipeline之后微信会根据你settings.py中的各种跳转url根据不同的逻辑做跳转,你需要把其他的业务逻辑放在对应的view里面即可。

然后你加个next参数做跳转就可以实现微信app里面的登录的功能了。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...