django项目学习之QQ登录
最近在用django框架寫一個(gè)商城項(xiàng)目(前后端分離),里面用到的一些技術(shù)其他項(xiàng)目也可以借鑒,于是就想寫一些博客記錄,以防自己忘記,今天先寫一個(gè)關(guān)于登錄接口中引入QQ登錄接口的流程。
關(guān)于QQ登錄接口的引入,在qq官方文檔有詳細(xì)說(shuō)明,網(wǎng)址如下:
?http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0
不過(guò)該文檔中并沒(méi)有python的,需要自己去造輪子,下面我就來(lái)記錄一下流程。
首先講一下準(zhǔn)備工作,先去QQ提供的第三方接口網(wǎng)站申請(qǐng)一個(gè)appid和appkey,關(guān)于這兩個(gè)數(shù)據(jù),我沒(méi)有深入研究,因?yàn)楦业臉I(yè)務(wù)邏輯沒(méi)什么關(guān)聯(lián),QQ官方對(duì)這兩個(gè)數(shù)據(jù)描寫如下:
appid:應(yīng)用的唯一標(biāo)識(shí)。在OAuth2.0認(rèn)證過(guò)程中,appid的值即為oauth_consumer_key的值。
appkey:appid對(duì)應(yīng)的密鑰,訪問(wèn)用戶資源時(shí)用來(lái)驗(yàn)證應(yīng)用的合法性。在OAuth2.0認(rèn)證過(guò)程中,appkey的值即為oauth_consumer_secret的值。
然后是具體流程部分:首先來(lái)講一下大概的流程,
①你需要在登錄界面放置一個(gè)QQ登錄的接口,去請(qǐng)求QQ登錄的界面,該接口的功能應(yīng)該就是拼接一個(gè)QQ登錄的url,然后通過(guò)GET方式去訪問(wèn)QQ登錄的界面。
②訪問(wèn)到QQ的登錄界面后,用戶進(jìn)行登錄,登錄完成后,則會(huì)跳轉(zhuǎn)到回調(diào)地址,請(qǐng)求方式為GET,即你上面填寫的redirect_uri,同時(shí)會(huì)帶上兩個(gè)參數(shù),Authorization Code和status,這里的status就是你填寫的status,Authorization Code是QQ服務(wù)器生成的一串字符,你可以通過(guò)該字符獲得access_token(即登錄時(shí)需要的token值)。獲得到對(duì)應(yīng)的token值后,會(huì)在對(duì)QQ服務(wù)器在進(jìn)行請(qǐng)求,請(qǐng)求方式為GET,請(qǐng)求一個(gè)openid。
③根據(jù)openid來(lái)判斷該QQ用戶和我們網(wǎng)站的用戶是否有關(guān)聯(lián),在返回相應(yīng)的頁(yè)面
首先來(lái)詳細(xì)講下第一步,這一步對(duì)應(yīng)QQ官方的文檔中的獲取Access Token那一步中的第一步,查閱文檔,訪問(wèn)的url為https://graph.qq.com/oauth2.0/authorize,當(dāng)然這里我們需要一些必填參數(shù),由于請(qǐng)求方式為GET,所以參數(shù)只能以查詢字符串的形式發(fā)送,第一個(gè)參數(shù)是response_type,固定為code,格式為字符串,第二個(gè)參數(shù)是client_id,這個(gè)需要填寫你申請(qǐng)的appid,第三個(gè)參數(shù)為redirect_uri,該參數(shù)需填寫成功授權(quán)后的回調(diào)地址,必須是注冊(cè)appid時(shí)填寫的主域名下的地址,建議設(shè)置為網(wǎng)站首頁(yè)或網(wǎng)站的用戶中心。注意需要將url進(jìn)行URLEncode。最后一個(gè)參數(shù)為state,該參數(shù)表示client端的狀態(tài)值。用于第三方應(yīng)用防止CSRF攻擊,成功授權(quán)后回調(diào)時(shí)會(huì)原樣帶回。在這里我們用來(lái)接收url中的next參數(shù)中的數(shù)據(jù)。訪問(wèn)成功,用戶登錄后,會(huì)跳轉(zhuǎn)到回調(diào)鏈接,并帶上code參數(shù)和status參數(shù)。
然后是第二步,這一步涉及兩個(gè)參數(shù)的請(qǐng)求,首先是access_token,這一步對(duì)應(yīng)QQ官方的文檔中的獲取Access Token那一步中的第二步,查閱文檔,訪問(wèn)的url為https://graph.qq.com/oauth2.0/token,如上,這里也有一些必填參數(shù),第一個(gè)參數(shù)為grant_type,默認(rèn)為“authorization_code”,我們照填即可,第二個(gè)參數(shù)為client_id,同第一步,第三個(gè)參數(shù)為client_secret,這個(gè)需要填寫你申請(qǐng)的appkey,第四個(gè)參數(shù)為code,即回調(diào)時(shí)傳過(guò)來(lái)的code參數(shù),最后一個(gè)參數(shù)為redirect_uri,同第一步。返回成功后,我們可以從返回的包中獲取到相應(yīng)的數(shù)據(jù),從返回的數(shù)據(jù)中我們可以得到access_token的值
類似:access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14
獲得到對(duì)應(yīng)的token后,會(huì)在向QQ服務(wù)器請(qǐng)求一個(gè)openid,這一步對(duì)應(yīng)QQ官方的文檔中的獲取openid的那一步,訪問(wèn)的url為https://graph.qq.com/oauth2.0/me,這一步只有一個(gè)必傳參數(shù)access_token,即上一步請(qǐng)求得到的token值,返回成功后,會(huì)得到以下包數(shù)據(jù)
callback({"client_id":"YOUR_APPID", "openid":"YOUR_OPENID"})\n;? 從該數(shù)據(jù)可以得到我們需要的openid,根據(jù)對(duì)應(yīng)的openid來(lái)返回對(duì)應(yīng)的頁(yè)面。
轉(zhuǎn)載于:https://www.cnblogs.com/HZHST/p/11287463.html
總結(jié)
以上是生活随笔為你收集整理的django项目学习之QQ登录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: What are current fas
- 下一篇: 最新 主流笔记本cpu列表