【Python web 开发】social_django 集成第三方登录
1、背景:
我们之前写的一些接口仅仅是知道微博授权的一个流程,要把第三方授权登录的用户的user_id 弄到我们的user_profile 中来才是 符合业务的需求的
因此gitbub上已经有一些开源的第三方插件使用 social_app_django
social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块
目前流行的第三方登录都采用了OAuth2协议
使用文档:https://python-social-auth.readthedocs.io/en/latest/
因为我们使用的是django rest framwork ,所以可以点击这个查看文档介绍
2、安装第三方插件
$ pip install social-auth-app-django
把'social_django 加入到app 里面,djando里面的开发一般都是基于app开发的
![](https://img2018.cnblogs.com/blog/1127434/201811/1127434-20181117181054064-759096477.png)
再执行migrate,执行之前,先检查下database 的配置
mysql 默认的数据库引擎是 MyISAM,但是由于social_app_django有些东西是MyISAM不支持的,因此我们要将database 设置为INNODB
第二个问题,为什么不先进行migration ,而是跨过migration 直接migrate呢? 我们看源码知道 social_app_django 已经帮我们migration 好了
那我们就直接migrate:
查看数据库,发现多了一些表
我们继续看文档,看还需要配置一些什么东西
在Authentication backends¶ 里面加一些微博,或者qq的配置
这些源码里面都有封装好的site-packages\social_core\backends ,我们直接配置就好了
配置路由url
url('', include('social_django.urls', namespace='social'))
url 里面包含了这些:这里面封装的基本上都是我前几篇写的基于微博开放api的拿code,access_token ,其余还完善了很多,包括自动完成后续工作登录用户自动绑定,没有用户就新建用户等逻辑
再来项目的setting 里面配置第三方登录所需要用到的KEY, SECRET, 以及回调地址
基本的都做配置好了,然后在我们浏览器里面请求一下 127.0.0.1:8000/login/weibo
测试账号是没有点击授权的步骤,正式环境下是会弹出授权的页面的,如果用户有登录,则会自动绑定起来,没有就是登陆,登录成功跳转到配置的url页面
我们在表中看下 ,有记录我的user_id=2
我们自己的用户表user_profile中查看
这样就完成了第三方登录 与我们自己系统之间的用户绑定
由于social_app_django 是基于传统的django 编写的,我们是用的django rest framwork,判断用户是否登录的机制不一样,django rest framwork 是在cookie 里面设置token的,判断用户是否登录 是在cookie里面去取name 和token的,而传统的django 是在cookie里面设置session id 的
因此我们要修改源码,来让我们的系统识别到这个第三方登录进来的用户,由于我还没做用户登录注册这快的逻辑,还没做,所以就先注释掉!
待续!!