標籤:地址 access 分享 就是 base url 請求 按鈕 mod
本篇主要介紹如何使用Django的Restful Framework提供第三方登入的API,主要介紹其流程及基本的代碼實現。
在學習之前我們需要知道什麼是第三方登入 -- 是指使用者可以不在本項目中輸入密碼,而直接通過第三方的驗證,成功登入本項目。
實現第三方登入時,我們需要明確QQ提供的開發人員文檔,即 :
- 成為QQ的開發人員,註冊。
- 建立應用,即擷取本項目對應與QQ互聯的應用ID,建立應用
- QQ登入開發文檔,文檔
一、QQ登入流程
有了上述的準備工作,我們需要明確進行第三方登入的流程,這裡以QQ登入狀態例:
從上面的時序圖我們可以總結以下幾步:
- 當使用者點擊QQ登入按鈕時,會向後端請求進行QQ登入的介面,即進行QQ登入的URL。
- 後端實現API,返回根據QQ文檔提供的URI和參數,拼接URL返回給前端。 -- API①
- 前端在拿到URL會跳轉到QQ登入介面,使用者進行登入,登入成功,QQ伺服器會根據我們提供的callback地址,跳轉到我們項目的回調URL中。
- 提供介面,決定使用者是直接登入成功跳轉到上一次訪問的頁面,還跳轉到與本項目的帳號進行綁定的頁面。(取決於使用者是否第一次進行QQ登入)。而在這個過程中我們會--》根據回調URL中參數code,向QQ伺服器請求授權認證access_token,再根據access_token擷取使用者的openid及帳戶圖片等。再由openid去資料庫查詢是否存在,決定跳轉頁面。 -- API②
- 若使用者第一次使用QQ登入,為與本項目帳號進行綁定,跳轉到綁定頁面,讓使用者進行綁定操作。在進行綁定同時,分為兩種情況。 -- API③
- 使用者在本項目中的帳號已存在,只需進行校正,將openid與使用者進行綁定即可。
- 若使用者在本項目中帳號不存在,需先為使用者建立在本項目的帳號,在進行綁定。
- 綁定完成,向前端返回使用者資訊,前端執行頁面的調轉。
那麼流程我們已經分析完成,接下就是資料庫的模型類的建立、API的一一的實現。
二、模型類的實現
首先我們明確一下為什麼要建立新的模型類,而不是在原有的User的模型類中添加欄位,這是由於若後面的第三方登入越來越多,那麼我們每次都為User模型類中添加欄位,而這些欄位通常與使用者需要展示的資訊關係不大,同時會讓資料表顯得臃腫。
大致看一下結構如何吧:
在該模型類中我們只建立兩個欄位:
- 使用者 -- 使用者模型類對象
- openid -- 使用者在QQ伺服器的openid。
而在BaseModel只有兩個欄位,這是有序create_time和update_time可能經常使用,故單獨抽取出來進行處理。
from django.db import modelsclass BaseModel(models.Model): """為模型類補充欄位""" create_time = models.DateTimeField(auto_now_add=True, verbose_name="建立時間") update_time = models.DateTimeField(auto_now=True, verbose_name="更新時間") class Meta: abstract = True # 說明是抽象模型類, 用於繼承使用,資料庫遷移時不會建立BaseModel的表
本篇主要進行了第三方登入的流程分析,和資料庫模型類的建立。下篇會對每個API進行一一 的實現。
Django_Restful Framework之QQ登入流程分析(一)