微信公众号开发小记——3.接入三方登陆

为何要接入三方登陆

若是你的微信服务器要作复杂的逻辑,好比html五、给用户提供高级的服务,而且有很好看的页面等等,这种时候你就须要一个正常的web服务器,用户打通就须要作三方登陆了。html

而若是你决定直接用weixin_server作web服务器彻底没有问题,80端口给微信留着,剩下的你能够按照一个正常的django项目开发,前端能够接入weixin sdk。前端

python-socail-auth

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

若是你想用这个weixin_server项目接入三方登陆,能够参考feature/myauth分支,三方用的python-social-auth weixin app backend刚提pr不知道做者何时合并,若是要用先-e安装个人分之的这个版本个人python-social-auth,分支master_originpython

用户信息

django默认的User信息确定是不够用的,按照之前开发的尿性,咱们须要一个UserProfile作onetoone的关联,记录额外信息。myauth/models.pygit

配置

参考文档配置便可,能够参考个人配置。github

注意配置中SOCIAL_AUTH_通用配置 | SOCIAL_AUTH_QQ_qq的配置的是由于这个地方源码 social/utils.py的代码来作到的。web

所谓的正确姿式

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

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里面的登陆的功能了。

相关文章
相关标签/搜索