django項目學習之QQ登陸

最近在用django框架寫一個商城項目(先後端分離),裏面用到的一些技術其餘項目也能夠借鑑,因而就想寫一些博客記錄,以防本身忘記,今天先寫一個關於登陸接口中引入QQ登陸接口的流程。python

關於QQ登陸接口的引入,在qq官方文檔有詳細說明,網址以下:django

 http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0後端

不過該文檔中並無python的,須要本身去造輪子,下面我就來記錄一下流程。服務器

首先講一下準備工做,先去QQ提供的第三方接口網站申請一個appid和appkey,關於這兩個數據,我沒有深刻研究,由於跟個人業務邏輯沒什麼關聯,QQ官方對這兩個數據描寫以下:app

appid:應用的惟一標識。在OAuth2.0認證過程當中,appid的值即爲oauth_consumer_key的值。
appkey:appid對應的密鑰,訪問用戶資源時用來驗證應用的合法性。在OAuth2.0認證過程當中,appkey的值即爲oauth_consumer_secret的值。
框架

而後是具體流程部分:首先來說一下大概的流程,前後端分離

你須要在登陸界面放置一個QQ登陸的接口,去請求QQ登陸的界面,該接口的功能應該就是拼接一個QQ登陸的url,而後經過GET方式去訪問QQ登陸的界面。

訪問到QQ的登陸界面後,用戶進行登陸,登陸完成後,則會跳轉到回調地址,請求方式爲GET,即你上面填寫的redirect_uri,同時會帶上兩個參數,Authorization Code和status,這裏的status就是你填寫的status,Authorization Code是QQ服務器生成的一串字符,你能夠經過該字符得到access_token(即登陸時須要的token值)。得到到對應的token值後,會在對QQ服務器在進行請求,請求方式爲GET,請求一個openid。

根據openid來判斷該QQ用戶和咱們網站的用戶是否有關聯,在返回相應的頁面

首先來詳細講下第一步,這一步對應QQ官方的文檔中的獲取Access Token那一步中的第一步,查閱文檔,訪問的url爲https://graph.qq.com/oauth2.0/authorize,固然這裏咱們須要一些必填參數,因爲請求方式爲GET,因此參數只能以查詢字符串的形式發送,第一個參數是response_type,固定爲code,格式爲字符串,第二個參數是client_id,這個須要填寫你申請的appid,第三個參數爲redirect_uri,該參數需填寫成功受權後的回調地址,必須是註冊appid時填寫的主域名下的地址,建議設置爲網站首頁或網站的用戶中心。注意須要將url進行URLEncode。最後一個參數爲state,該參數表示client端的狀態值。用於第三方應用防止CSRF攻擊,成功受權後回調時會原樣帶回。在這裏咱們用來接收url中的next參數中的數據。訪問成功,用戶登陸後,會跳轉到回調連接,並帶上code參數和status參數。
網站

而後是第二步,這一步涉及兩個參數的請求,首先是access_token,這一步對應QQ官方的文檔中的獲取Access Token那一步中的第二步,查閱文檔,訪問的url爲https://graph.qq.com/oauth2.0/token,如上,這裏也有一些必填參數,第一個參數爲grant_type,默認爲「authorization_code」,咱們照填便可,第二個參數爲client_id,同第一步,第三個參數爲client_secret,這個須要填寫你申請的appkey,第四個參數爲code,即回調時傳過來的code參數,最後一個參數爲redirect_uri,同第一步。返回成功後,咱們能夠從返回的包中獲取到相應的數據,從返回的數據中咱們能夠獲得access_token的值url

相似:access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14spa

得到到對應的token後,會在向QQ服務器請求一個openid,這一步對應QQ官方的文檔中的獲取openid的那一步,訪問的url爲https://graph.qq.com/oauth2.0/me,這一步只有一個必傳參數access_token,即上一步請求獲得的token值,返回成功後,會獲得如下包數據

callback({"client_id":"YOUR_APPID", "openid":"YOUR_OPENID"})\n;  從該數據能夠獲得咱們須要的openid,根據對應的openid來返回對應的頁面。

相關文章
相關標籤/搜索