摘要:前言之前讓網(wǎng)頁公司制作新官網(wǎng)的時候規(guī)劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣尤其是微信開放平臺,所以一直拖延著,到了最近只能自己添加相關(guān)的功能。
前言
之前讓網(wǎng)頁公司制作新官網(wǎng)的時候規(guī)劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣(尤其是微信開放平臺),所以一直拖延著,到了最近只能自己添加相關(guān)的功能。
由于是剛接觸Python和Django,期間找了好多視頻和資料學(xué)習(xí)練習(xí),才慢慢把MVT結(jié)構(gòu)什么的弄明白了,第三方登錄方面百度找到了兩篇很有用的文章,也從中學(xué)習(xí)到了很多:
1. python實現(xiàn)微信第三方網(wǎng)站掃碼登錄(Django)
2. 用django-social-auth 做中國社交網(wǎng)站三方登錄(QQ,微博,豆瓣,百度,人人,微信)
在實現(xiàn)QQ、微博的登錄時就深刻體會到使用social-auth來實現(xiàn)第三方登錄是非常簡單方便、直接而且完美的,只需要添加配置內(nèi)容,一句代碼都不需要寫,真的是一句處理的代碼都不需要寫哦!
然而卻一直沒有找到微信怎么也同樣來實現(xiàn)(上面第二篇文章雖然標題有,但文章內(nèi)卻壓根沒有提及);從social-auth的解讀文檔里也愣是沒找到Weixin的內(nèi)容,由于官網(wǎng)已經(jīng)有相應(yīng)的User數(shù)據(jù)表以及存儲第三方的UserSocialAuth數(shù)據(jù)格,非常規(guī)范,在使用上面第一種方法實現(xiàn)之后卻苦惱于用戶數(shù)據(jù)表的添加和修改,真心不想破壞那種結(jié)構(gòu),就在重拾social-auth想學(xué)習(xí)一下數(shù)據(jù)庫存儲方式的時候,竟然在social-backends里發(fā)現(xiàn)了Weixin.py,那不就說明能支持微信么?
微信開放平臺申請及開通需要提交很多認證資料,也需要繳納¥300每年的認證費用;與公眾號、服務(wù)號等不一樣哦。地址:http://open.weixin.qq.com
認證通過后,添加相應(yīng)的網(wǎng)頁應(yīng)用,注意授權(quán)回調(diào)域的填寫,寫網(wǎng)站的主域名即可,比如說不能寫www.zzmxy.com/login/wechat之類的,只需要寫www.zzmxy.com 即可(不需要添加http或者https),不然后期都是redirect_uri 參數(shù)錯誤!
實操步驟
安裝social-auth:
由于官網(wǎng)使用的是python-social-auth==0.2.12,下載源碼回來之后,發(fā)現(xiàn)在social-backends里也是有Weixin.py的,證明可用(Ubuntu + Python2.7 + Django1.7);
</>復(fù)制代碼
pip install python-social-auth==0.2.12
social-auth配置:
SOCIAL_AUTH_PIPELINE配置:請參考上面提及的第二篇文章的書寫;
AUTHENTICATION_BACKENDS配置:
</>復(fù)制代碼
AUTHENTICATION_BACKENDS = (
"social.backends.weibo.WeiboOAuth2", #微博的功能
"social.backends.qq.QQOAuth2", #QQ的功能
"social.backends.weixin.WeixinOAuth2", #這個是導(dǎo)入微信的功能
"oscar.apps.customer.auth_backends.EmailBackend",
"django.contrib.auth.backends.ModelBackend",
)
微信開放平臺應(yīng)用APPID與SECRET的配置:
</>復(fù)制代碼
SOCIAL_AUTH_WEIBO_KEY = "53*****29"
SOCIAL_AUTH_WEIBO_SECRET = "272152************81a8b3"
SOCIAL_AUTH_QQ_KEY = "10*****51"
SOCIAL_AUTH_QQ_SECRET = "5807************d15bd97"
SOCIAL_AUTH_WEIXIN_KEY = "wx4fb***********599" #開放平臺應(yīng)用的APPID
SOCIAL_AUTH_WEIXIN_SECRET = "f1c17************08c0489" #開放平臺應(yīng)用的SECRET
配置完之后,運行你的網(wǎng)站,使用 www.域名.com/login/weixin 訪問即可打開相應(yīng)的頁面了,但有沒有發(fā)現(xiàn)出現(xiàn)錯誤了:Scope參數(shù)錯誤或沒有Scope權(quán)限,實際操作過程中,我發(fā)現(xiàn)social-auth自動生成的二維碼訪問鏈接里,是少了一個scope參數(shù),而微信官方給的二維碼訪問鏈接是這樣的:
</>復(fù)制代碼
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
如上需要的參數(shù)為5個,state可省略,但scope則是必需的,而對于網(wǎng)頁授權(quán)的訪問,scope作用域參數(shù)為固定值scope=snsapi_login,這樣的話,我們就需要在social-auth的源代碼上,把這個參數(shù)值給加上,根據(jù)你實際的site-packages安裝路徑,找到/social/backends/weixin.py文件,如我使用VirtualEnv建的路徑是:
</>復(fù)制代碼
/home/ubuntu/env/mppython/lib/python2.7/site-packages/social/backends/weixin.py
打開這個文件,找到里面def auth_params()這一段內(nèi)容(原文):
</>復(fù)制代碼
def auth_params(self, state=None):
appid, secret = self.get_key_and_secret()
params = {
"appid": appid,
"redirect_uri": self.get_redirect_uri(state),
}
if self.STATE_PARAMETER and state:
params["state"] = state
if self.RESPONSE_TYPE:
params["response_type"] = self.RESPONSE_TYPE
return params
在params字典里,添加一個scope參數(shù)即可,修改后如下:
</>復(fù)制代碼
def auth_params(self, state=None):
appid, secret = self.get_key_and_secret()
params = {
"appid": appid,
"redirect_uri": self.get_redirect_uri(state),
"scope": "snsapi_login",
}
if self.STATE_PARAMETER and state:
params["state"] = state
if self.RESPONSE_TYPE:
params["response_type"] = self.RESPONSE_TYPE
return params
修改保存后,再重新運行工程,再次訪問 www.域名.com/login/weixin 即可看到效果了!
后記本文的內(nèi)容是在《用django-social-auth 做中國社交網(wǎng)站三方登錄(QQ,微博,豆瓣,百度,人人,微信)》基礎(chǔ)上擴展的,有些地方并沒有細化或者深入說明(比如說urls的配置等),如果看不太明白的朋友,請轉(zhuǎn)到上述文章查找相關(guān)的信息或者留言交流,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38521.html
摘要:寫在前面本周剛在項目中實現(xiàn)了微信第三方網(wǎng)站掃碼登錄。準備與注意事項微信公眾平臺跟微信開放平臺是兩個不同的平臺,別搞混了。參數(shù)在微信開放平臺中查看。 寫在前面 本周剛在項目中實現(xiàn)了微信第三方網(wǎng)站掃碼登錄。因為第一次寫相關(guān)項目,所以遇到了很多坑。所以寫這篇文章是希望像我之前那樣的小白也能從容的開發(fā),不要浪費無謂的時間,這篇文章盡量寫的詳細簡單。準備與注意事項 微信公眾平臺跟微信開放平臺是...
摘要:詳情接口我們這里主要講的是網(wǎng)站應(yīng)用,網(wǎng)站應(yīng)用微信登錄是基于協(xié)議標準構(gòu)建的微信授權(quán)登錄系統(tǒng)即上面的協(xié)議。在微信客戶端授權(quán)登錄獲取用戶信息的可以查看。微信授權(quán)登錄目前支持模式,適用于擁有端的應(yīng)用授權(quán)。 一、OAuth2.0 OAuth(開放授權(quán))是一個開放標準,允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲的私密的資源(如照片,視頻,聯(lián)系人列表),而無需將用戶名和密碼提供給第三方應(yīng)用。 ...
摘要:比較流行的解決方案是允許用戶通過第三方登錄,即可以通過微博這類知名社區(qū)的授權(quán),從而登錄你的小站,免去了注冊的麻煩。微博微信的登錄方式大致都遵循這個流程本章雖然加載了微博的接口,但是限于篇幅并沒有配置,請讀者查閱官方文檔去實現(xiàn)。 現(xiàn)在我們已經(jīng)擁有一個可以進行用戶本地登錄的博客系統(tǒng)了。如果有人欣賞你的文章,說不定就會注冊成為本地用戶,并和你好好交流一番。 但頭疼的是,用戶可能每天都在互聯(lián)網(wǎng)...
摘要:微信在做一些操作是需要用到生成二維碼等而每天接口的調(diào)用上限為,需要自己做緩存文檔講了幾種方式,我覺得放在中拿比較妥當。微信菜單會緩存分鐘,你可以取消關(guān)注,然后在關(guān)注查看菜單變化效果。 描述 微信公眾號開發(fā)基本分為2大種類型 1.用戶直接做了某些操作(回復(fù)信息、訂閱、掃碼、發(fā)語音、點按鈕等),此時這些信息微信會發(fā)送到微信服務(wù)器的80端口,這是一種開發(fā)類型;2.通過連接(按鈕、文章)引導(dǎo)用...
摘要:微信開放平臺提供了網(wǎng)站掃碼登錄的接口,用于獲取用戶基本信息頭像,昵稱方便網(wǎng)站快速接入微信登錄,快捷登錄。需要使用登錄接口,需要成為微信開放平臺認證開發(fā)者元才可以獲得這個接口權(quán)限。 微信開放平臺提供了網(wǎng)站掃碼登錄的接口,用于獲取用戶基本信息(頭像,昵稱)方便網(wǎng)站快速接入微信登錄,快捷登錄。需要使用登錄接口,需要成為微信開放平臺認證開發(fā)者(300元)才可以獲得這個接口權(quán)限。 準備工作: 1...
閱讀 3777·2021-08-30 09:47
閱讀 3706·2019-08-30 15:56
閱讀 681·2019-08-30 14:18
閱讀 703·2019-08-29 16:17
閱讀 2070·2019-08-29 11:07
閱讀 648·2019-08-26 13:53
閱讀 3451·2019-08-26 10:26
閱讀 2498·2019-08-23 18:30
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要