【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開發的
再執行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 的
因此我們要修改原始碼,來讓我們的系統識別到這個第三方登入進來的使用者,由於我還沒做使用者登入註冊這快的邏輯,還沒做,所以就先註釋掉!
待續!!