1、背景:

我们之前写的一些接口仅仅是知道微博授权的一个流程,要把第三方授权登录的用户的user_id  弄到我们的user_profile 中来才是 符合业务的需求的

因此gitbub上已经有一些开源的第三方插件使用 social_app_django

 

 

social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块

 

目前流行的第三方登录都采用了OAuth2协议

 

【Python web 开发】social_django 集成第三方登录

 

 

使用文档:https://python-social-auth.readthedocs.io/en/latest/

因为我们使用的是django  rest  framwork ,所以可以点击这个查看文档介绍

【Python web 开发】social_django 集成第三方登录

 

2、安装第三方插件

$ pip install social-auth-app-django

'social_django 加入到app  里面,djando里面的开发一般都是基于app开发的
【Python web 开发】social_django 集成第三方登录

 

再执行migrate,执行之前,先检查下database 的配置

mysql 默认的数据库引擎是 MyISAM,但是由于social_app_django有些东西是MyISAM不支持的,因此我们要将database 设置为INNODB

【Python web 开发】social_django 集成第三方登录

 

第二个问题,为什么不先进行migration ,而是跨过migration 直接migrate呢? 我们看源码知道 social_app_django 已经帮我们migration 好了

【Python web 开发】social_django 集成第三方登录

那我们就直接migrate:

【Python web 开发】social_django 集成第三方登录

 

查看数据库,发现多了一些表

【Python web 开发】social_django 集成第三方登录

 

我们继续看文档,看还需要配置一些什么东西

在Authentication backends 里面加一些微博,或者qq的配置

【Python web 开发】social_django 集成第三方登录

 

这些源码里面都有封装好的site-packages\social_core\backends ,我们直接配置就好了

【Python web 开发】social_django 集成第三方登录

 

配置路由url  

url('', include('social_django.urls', namespace='social'))

url 里面包含了这些:这里面封装的基本上都是我前几篇写的基于微博开放api的拿code,access_token ,其余还完善了很多,包括自动完成后续工作登录用户自动绑定,没有用户就新建用户等逻辑
【Python web 开发】social_django 集成第三方登录

 

 再来项目的setting 里面配置第三方登录所需要用到的KEY,  SECRET, 以及回调地址

【Python web 开发】social_django 集成第三方登录

 

 基本的都做配置好了,然后在我们浏览器里面请求一下  127.0.0.1:8000/login/weibo

测试账号是没有点击授权的步骤,正式环境下是会弹出授权的页面的,如果用户有登录,则会自动绑定起来,没有就是登陆,登录成功跳转到配置的url页面

我们在表中看下 ,有记录我的user_id=2

【Python web 开发】social_django 集成第三方登录

我们自己的用户表user_profile中查看

【Python web 开发】social_django 集成第三方登录

 

 

 这样就完成了第三方登录 与我们自己系统之间的用户绑定

由于social_app_django 是基于传统的django 编写的,我们是用的django rest framwork,判断用户是否登录的机制不一样,django  rest framwork  是在cookie 里面设置token的,判断用户是否登录 是在cookie里面去取name token的,而传统的django  是在cookie里面设置session id

因此我们要修改源码,来让我们的系统识别到这个第三方登录进来的用户,由于我还没做用户登录注册这快的逻辑,还没做,所以就先注释掉!

【Python web 开发】social_django 集成第三方登录

 

 待续!!