1. 程式人生 > >【Python web 開發】social_django 整合第三方登入

【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

因此我們要修改原始碼,來讓我們的系統識別到這個第三方登入進來的使用者,由於我還沒做使用者登入註冊這快的邏輯,還沒做,所以就先註釋掉!

 

 待續!!