通用社區(qū)登陸組件技術分享中篇:OAuth登陸組件流程
上節(jié)內(nèi)容:通用社區(qū)登陸組件技術分享(開源)上篇:OAuth 授權登陸介紹
本節(jié)包括以下內(nèi)容:
- 第三方社區(qū)賬號登陸的授權流程
- OAuth2 組件的下載及web.config配置
- OAuth2 組件的5行代碼編寫流程
- 總結與下節(jié)內(nèi)容預告
一: 第三方社區(qū)賬號登陸的授權流程
1:首先從這里開始:用戶進入登陸界面
2:用戶點擊用新浪微博或QQ登陸,系統(tǒng)跳到第三方授權頁面,(QQ示例授權界面)
3:確定授權后,第三方跳轉(zhuǎn)返回你的回調(diào)頁(在應用里設置),通常仍是系統(tǒng)登陸頁面統(tǒng)一處理。授權用戶綁定您網(wǎng)站的賬號。
我們首次引導登陸并綁定賬號,當然,官方建議的比較好的用戶體驗的界面是這樣的:
4:用戶正常登陸或注冊新賬號,自動實現(xiàn)綁定,至此流程結束,下一次用戶點用第三方賬號登陸時,系統(tǒng)檢測到已綁定賬號,直接用綁定的賬號進入后臺。
二:OAuth2 組件的下載及web.config配置
1:下載OAuth2.dll組件,下載:( OAuth2.rar)
2:引用該dll到您的網(wǎng)站項目中;
3:在web.config配置您的appkey、appsercet及回調(diào)網(wǎng)址(通常是登陸頁面),相關的數(shù)據(jù)填寫到web.config對應key的value里。
PS:獲取或調(diào)置回調(diào)網(wǎng)址是在新浪和QQ開放者平臺操作的,相關網(wǎng)址見上節(jié)文章。
接下來,我們要在登陸界面(示如Login.aspx)動點小手術:
三:OAuth2 組件的5行代碼編寫流程
- OAuth2.UI.GetHtml() //獲取界面顯示
代碼示例:通常我們可能會在Login.aspx的html里寫上這么一行代碼來顯示: <%=OAuth2.UI.GetHtml()%>
當然我們也經(jīng)常喜歡在Login.aspx.cs后臺代碼(通常是Page_Load事件)里輸出:div控件ID.InnerHtml=OAuth2.UI.GetHtml();
于是就有了剛才的登陸界面下面那兩個第三方授權鏈接圖標:
用戶點擊第三方授權,跳到第三方授權頁面,操作完回調(diào)還會返回到這個登陸界面,只是多了兩個參數(shù)code=xxxx&state=xxx(回調(diào)頁面仍設置登陸頁)。
- OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.Current;//獲取當前的授權類型,如果成功,則緩存到Session中。
- ob.Authorize(out account)//檢測是否授權成功,并返回綁定的賬號。
這兩行代碼,是寫在Page_Load事件中,判斷如果是跳轉(zhuǎn)回來的,就分析授權,然后進行分支處理:
以下是示例的分支代碼:
- OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.Current;//獲取當前的授權類型
- if (ob != null) //說明用戶點擊了授權,并返回到登陸界面來
- {
- string account = string.Empty;
- if (ob.Authorize(out account))//檢測是否授權成功,并返回綁定的賬號(具體是綁定ID還是用戶名,你的選擇)
- {
- if (!string.IsNullOrEmpty(account))//已綁定賬號,直接用該賬號設置登陸。
- {
- //根據(jù)賬號,設置登陸、設置cookie,跳轉(zhuǎn)到后臺管理界面。
- }
- else // 未綁定賬號,引導提示用戶綁定賬號。
- {
- //取用戶的第三方頭像和昵稱,組裝界面顯示,像秋色園就一行提示文字
- }
- }
- else // 讀取授權失敗。
- {
- //提示用戶重試,或改用其它社區(qū)方法登陸。
- }
如果用戶已經(jīng)授權,首次未綁定賬號,通常就有了最下方的提示文字,同時“登陸”的文字就改成了“綁定賬號":
4:OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.SessionOAuth;//獲取存在Session的授權
5:ob.SetBindAccount(userName);//綁定賬號
這兩行代碼,寫在BtnLogin和BtnRegister按鈕的事件中,當用戶登陸,或注冊新賬號時,我們從Session中獲取剛剛的社區(qū)授權,然后綁定賬號:
- //用戶登陸,或注冊完賬號(這時我們可以拿到ID或者username,綁定哪個就看使用哪個方便了,我們添加以下三行代碼,
- OAuth2.OAuth2Base ob = OAuth2.OAuth2Factory.SessionOAuth;//獲取剛剛的授權(授權后存在Session中)
- if (ob != null && !string.IsNullOrEmpty(ob.openID))
- {
- ob.SetBindAccount(userName);//綁定賬號username或id都可以
- }
到這里,整個應用就完成了,就是這么簡單,除配置項,組件提供的關鍵的代碼只有5行,卻實現(xiàn)了相關的功能。
四:總結與下節(jié)內(nèi)容預告
A:看完本文,您應該可以獲取到以下信息:
- 知道OAuth授權的界面流程
- 知道怎么實現(xiàn)這個授權流程。
B:如果您認真看完本節(jié),或自己實操下,您可能有以下問題想問:
- 和網(wǎng)站綁定授權,沒看到相關的數(shù)據(jù)庫操作,那獲取的token和openid存在哪?
- 如何修改界面,或自定義UI界面?
- 有沒有源碼?
也許,下面這句話給了您答案:下節(jié),將開放源碼下載并嘗試為您講解源碼中的組件設計思路,敬請關注。
51cto大賽的參賽頁面,感謝路過的朋友也順手扔一票:http://blog.51cto.com/contest2012/2127378
原文鏈接:http://www.cnblogs.com/cyq1162/archive/2012/11/06/2756247.html