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開發的

再執行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 的
因此我們要修改源碼,來讓我們的系統識別到這個第三方登錄進來的用戶,由於我還沒做用戶登錄注冊這快的邏輯,還沒做,所以就先注釋掉!

待續!!
