台灣最大程式設計社群網站
線上人數
1019
 
會員總數:239920
討論主題:186058
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 學習ASP.NET 2.0會員機制三部曲
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
學習ASP.NET 2.0會員機制三部曲
價值 : 10 QP  點閱數:17136 回應數:17

樓主

topcat 版主
高級顧問
92887 161
29239 11610
發送站內信

捐贈 VP 給 topcat
<strong>緣起</strong>
ASP.NET 2.0 怎麼建置會員機制,這個問題幾乎每隔一段時間就會在討論區中被人提起。小喵利用這個機會把以前寫過的文章整理一下,依照由淺而深的方式來學。

<strong>首部曲(動畫教學驗證授權機制)</strong>
在ASP.NET 2.0裡面,已經有內建一套會員機制,讓初學者可以在不撰寫任何程式碼的情況下,應用在自己的ASP.NET 2.0的Web應用系統中。這個方式必須搭配SQL Server Express。所以如果沒有安裝SQL Server Express的朋友,請先安裝後再跟著錄影教學一步一步的操作,就可以學會囉
文章在這
<a href="http://www.dotblogs.com.tw/topcat/archive/2008/06/02/4201.aspx" target="_blank" title="" rel="nofollow">ASP.NET的驗證與授權機制(動態錄影說明)</a>

<strong>二部曲(建立在SQL Server上)</strong>
當理解驗證與授權的機制後,接著可能會有疑問,我的資料庫是用MS SQL Server,難道一定要用SQL Express才能用預設的機制嗎?答案是可以用MS SQL Server取代SQL Express
方式請參考以下這一篇
<a href="http://www.dotblogs.com.tw/topcat/archive/2008/03/06/1266.aspx" target="_blank" title="" rel="nofollow">ASP.NET 2.0 如何將MemberShip的資料庫建立在自己的資料庫上</a>

<strong>三部曲(應用在自己的帳號密碼資料表)</strong>
在理解以上兩篇後,可能您會說,我已經現有帳號密碼的資料表了,而預設的機制建出這麼多資料表,是否有辦法用自己的帳號密碼資料表來做驗證的動作呢
方式請參考以下這一篇
<a href="http://www.dotblogs.com.tw/topcat/archive/2008/03/05/1237.aspx" target="_blank" title="" rel="nofollow">ASP.NET 2.0如何使用Login來存取自己的使用者資料庫</a>

<strong>權限管理進階--續曲</strong>
完成的三部曲後,應該可以選擇適合自己的方式去建立您的會員機制了。
如果還要再更進一步,設計更複雜的機制(結合TreeView頁面管理、結合角色管理等),可以在看以下這些權限管理的續曲

<a href="http://www.dotblogs.com.tw/topcat/archive/2008/05/07/3826.aspx" target="_blank" title="" rel="nofollow">ASP.NET進階權限控管-Part 1 願景</a>
<a href="http://www.dotblogs.com.tw/topcat/archive/2008/05/09/3914.aspx" target="_blank" title="" rel="nofollow">ASP.NET進階權限控管-Part 2 登入結合資料庫、樹狀結構維護</a>
<a href="http://www.dotblogs.com.tw/topcat/archive/2008/06/09/4255.aspx" target="_blank" title="" rel="nofollow">ASP.NET進階權限控管-Part 3 角色管理與角色使用者維護</a>
<a href="http://www.dotblogs.com.tw/topcat/archive/2008/09/01/5265.aspx" target="_blank" title="" rel="nofollow">ASP.NET進階權限控管-Part 4 【畫面】與【角色/使用者】權限結合</a>

搜尋相關Tags的文章: [ ASP.NET ] , [ 權限控管 ] ,
本篇文章發表於2010-12-09 20:18
== 簽名檔 ==
====== 以下是簽名檔(不是回應內容) ======
世界上有兩種東西,分享給別人後,不但不會變少,反而變更多
一個是快樂,另一個是知識
而分享知識,不但獲得更多知識,更獲得快樂~

知識,從分享開始....

歡迎到小喵的Blog:
Topcat姍舞之間的極度凝聚
http://www.dotblogs.com.tw/topcat
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

topcat
捐贈 VP 給 topcat 檢舉此回應
ASP.NET的驗證與授權機制(動態錄影說明)
緣起:
在網路上看使用者發問的時候,還有很多從ASP剛轉換ASP.NET的開發人員,在使用者驗證與畫面授權上,還是沿襲著以往的Session驗證的方式。其實在ASP.NET裡面就有一整套完整的驗證與授權機制。使用內建的機制可以更簡單的就能夠做到【登入驗證】與【資料夾授權】的功能。透過這篇文章,希望讀者可以學到驗證授權機制、如何搭配自己的資料庫,做到相同的驗證機制。

名詞解釋:
首先再開始介紹怎麼設計之前,先來說明一下兩個名詞:【驗證(authentication)】與【授權(authorization)】
(ps.小喵標上英文不是英文教學、也不是騷包賣弄,這會在Web.Config裡面用得到的兩個Tag唷)
驗證(authentication):身分檢查,例如:查驗帳號密碼是否正確
授權(authorization):權限檢查,查看是否有該畫面或資料夾的權限

說明順序
接著開始介紹ASP.NET的機制,小喵會依照以下的步驟來介紹。
1.精靈:使用精靈產生驗證、授權機制
2.機制:了解精靈產生後,預設首頁、登入頁面、拒絕匿名存取、登入後畫面導向,透過實際運作了解這些代表的意義
3.精靈幫我們做了什麼:Web.Config內的【驗證(authentication)】與【授權(authorization)】設定
4.搭配自己的使用者資料庫:改寫使用自己的資料庫

---------------------------------------------------------

精靈
首先用精靈的方式來設定【驗證】與【授權】的相關機制,這個部分小喵把過程錄製下來,請參考

http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin01.html

機制
接著介紹一下這樣的方式,有了哪些機制
1.在【允許匿名瀏覽】狀況下,如何讓登入、未登入瀏覽不同的訊息:這部分上面的教學已經示範了
2.如何設定【拒絕】【匿名使用者瀏覽】,也就是未經登入,就不允許瀏覽該畫面
3.匿名存取,登入後,轉回剛剛的畫面。(這部分是自動的,不必任何設定預設就是這樣)
4.如何設定【只允許】【特定角色瀏覽】
以上這些機制的設定,測試示範,請參考以下的錄影
http://vip2.blueshop.com.tw/topcat/DEMO/DemoLogin/DemoLogin02.html

精靈幫我們做了什麼
我們使用精靈,可以幫我們設定了這些東西,那麼到底精靈幫我們做了些什麼??事實上他幫我們修改了Web.config的一些設定。我們接著就來一一來說明
1.登入驗證方式:從區域網路(Windows)、從網際網路(Forms)
在Web.Config中找到authentication的設定,預設為Windows,剛剛改成【從網際網路】,這裡被改為【Forms】

2.登入頁面設定:設定登入的畫面是哪一個aspx,預設為Login.aspx
3.登入後預設首頁:如果從登入畫面進入系統,登入成功後預設要轉到哪一頁(如果沒有設定,預設會轉到Default.aspx)
這兩個部分精靈並不會幫我們改,不過我們可以手動得更改,找到<authentication mode="Forms" />將之改為以下這樣:(請注意,Web.config的英文字母大小寫必須撰寫正確唷!!)這樣更改後,系統要登入時就會找設定的myLogin.aspx來當作驗證

4.設定系統必須登入才能瀏覽(根目錄設定【拒絕匿名使用者】)
4a.可以在Web.Config中找到授權的設定如下:

4b.deny:拒絕
4c.allow:允許
4d.users="?"代表匿名使用者
4e.users="*"代表所有使用者
5.資料夾設定特定角色瀏覽:
重新整理專案後,會發現,Admin與Mem資料夾都多了Web.Config,設定該資料夾的【授權】就在該資料夾中的Web.Config,我們分別來看
5a.在設定裡面,越上方的越優先
5b.Admin:

5c.Mem:


搭配自己的使用者資料庫:
上面的方式,是使用內建的精靈設定出來的,他的資料庫是使用SQLExpress產生一個MDF的檔案在App_Data裡面,然而我們可能希望連的是SQL的資料庫,甚至我們可能希望用自己訂定好的資料庫、自己的資料表來運作,這個部分請參考小喵以往的文章
1.使用SQL資料庫:ASP.NET 2.0 如何將MemberShip的資料庫建立在自己的資料庫上
2.使用自定的使用者資料表:ASP.NET 2.0如何使用Login來存取自己的使用者資料庫

當然,這樣的權限控管機制能夠幫我們減少很多的程式碼,不過如果我們希望能夠更進一步的來控制權限,那麼就需要更進階的一些程式設定。小喵的進階權限控管的機制還有點複雜,有興趣的朋友請參考:ASP.NET進階權限控管-Part 1 願景
如果有需要修改密碼的規則,可以參考這一篇【修改ASP.NET內建驗證機制的密碼規則
本篇文章回覆於2010-12-09 21:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

topcat
捐贈 VP 給 topcat 檢舉此回應
ASP.NET 2.0 如何將MemberShip的資料庫建立在自己的資料庫上

ASP.NET 2.0可以透過Web Site Administration Tool來建立使用者登入的機制,並且可以有腳色管理的機制,不過一般使用的時候,都會在Web Site中的App_Data這個資料夾中產生一個MDF的檔案,這個檔案是SQL的資料庫檔案。然而如果我們需要與自己的資料表做相關的處理時,卻沒有這麼容易,畢竟我們其他會用到使用者的資料表不會建在那個MDF中,那麼要做Join就不是粉方便了

步驟一:建立自有的資料庫(如果已經存在省略)

步驟二:使用Aspnet_regsql.exe建立相關資料表

該檔案建立於您電腦中\Microsoft.NET\Framework\中的目前版本的目錄下(小喵的是在c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727),執行後就會啟動一個精靈,輸入主機、連線方式、帳號、密碼後,選擇資料庫,接著就會把相關資料表建立在您所選擇的資料庫中。

步驟三:設定Web.config


步驟四:在設定Web Site Administration Tool
此時看一下Provider應該會是指定的SqlServices,而建立的User,Roles也會在您ConnectionString指定的資料庫中建立了


本篇文章回覆於2010-12-09 21:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

topcat
捐贈 VP 給 topcat 檢舉此回應
ASP.NET 2.0如何使用Login來存取自己的使用者資料庫

緣起:
ASP.NET 2.0有許多增加的功能。其中有關於Login控制項的部份,可以粉神奇的,透過一些設定的方式,就可以不寫任何一句程式碼的情況下做到會員的存取、狀態的顯示、會員密碼的查詢、會員的建立等等。這個機制會在您的ASP.NET的專案中的App_Data中建立一個MDF的SQL資料庫,並且將使用者的相關資料建立在其中。這對於剛開始接觸ASP.NET的使用者無疑是一個粉好用的方式。

然而,我們可能需要用自己的資料庫來管理自己的會員資料,並且可能會與其他的相關資料做關聯處理、甚至會有自己的一套畫面授權機制。如果是這樣的情況,當然沒有辦法在一行程式都不用寫的狀況下就做到這樣。在以往沒有這些Login Controls控制項(Login, LoginView, LoginStatus, LoginName, PasswordRecovery, ChangePassword, CreateUserWizard )的情況下,每一種都需要使用許多的控制項、許多的程式碼,並且搭配Session的機制才能夠達成這樣的目的。然而在使用VS2005的今天,放著這些控制項不去用,卻又覺得浪費了些。那麼要怎麼來使用這些的控制項,卻又可以存取自己的資料庫呢?

設定驗證機制:
首先,在準備好自己的使用者資料表、資料庫後,我們要使用Login Control來登入系統,需要先將ASP.NET中的驗證機制改為使用【Forms】的方式(預設是【Windows】的驗證機制)
開啟您專案中的Web.Config,找到以下這個項目,將authenticationMode改為Forms,並且設定登入的畫面程式為Login.aspx(意指未來登入式透過這個畫面來執行)


設定登入畫面:
接著,來設定登入的畫面,首先,AddNewItem,增加一個Login.aspx的WebForm,接著在畫面中,先安排一個LoginView,然後利用SmartTag,先將模式設定為AnonymousTemplate,此時再拉一個Login放入LoginView中,接著,透過SmartTage將模式切換為LoggedInTemplate,並在LoginView中設定Hello,後面放一個LoginName,接著換行後然,在後面接著放入一個LoginStatus用來登入後,顯示登出。切入Code模式如下


撰寫Login相關程式
設定好畫面後,接著將LoginView的模式切回AnonymousTemplate,然後雙擊Login,撰寫如下程式:


以往我們在紀錄是否登入,以及登入的使用者,經常會透過Session的方式來記錄登入的狀態與登入的使用者,但是在VS2005的機制中,卻是透過FormsAuthentication.RedirectFromLoginPage來處理登入狀態維護,不再是使用Session的方式,而是透過Cookie的方式來處理。那麼應該如何來判斷是否已經登入過呢,可以透過Page.User.Identity.Name.ToString是否有資料來做判斷。事實上,LoginName這個控制項就是把Page.User.Identity.Name.ToString顯示出來

檢查資料庫使用者:
接著就來看如何從資料庫中驗證使用者是否存在的相關程式碼Function ChkLogin()



密碼加密安全補充:
原來使用ASP.NET的機制,密碼是有加密過的,目前小喵這個部份省略了,各位實際在運用的時候,請適當的將密碼的不份加密後再加以驗證,這樣會比較安全些。
^_^a


本篇文章回覆於2010-12-09 21:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

奇諾
檢舉此回應
純推喵大 佛心來的 很實用的文章
本篇文章回覆於2010-12-09 22:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

topcat
捐贈 VP 給 topcat 檢舉此回應
如果大家覺得這篇文章不錯,請按一下最上方的Facebook的讚
感恩您唷
^_^
本篇文章回覆於2010-12-10 00:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

無名
捐贈 VP 給 無名 檢舉此回應
發佈到PLURK了 感謝喵大
本篇文章回覆於2010-12-10 09:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

軋延油
檢舉此回應
太感謝小喵 大這麼詳細又細心的解說...........真的是太有佛心了!!!
我也按讚並且也想分享到我的 FB 給它用力推廣一下~ 哈哈~
本篇文章回覆於2010-12-10 10:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

MIS2000 Lab
檢舉此回應
了不起!!大推薦∼
了不起!!大推薦∼
了不起!!大推薦∼
本篇文章回覆於2010-12-10 11:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

topcat
捐贈 VP 給 topcat 檢舉此回應
感恩大家的推廣與推薦
^_^
本篇文章回覆於2010-12-10 14:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

香帥
檢舉此回應
非常棒,已超到仙人合一的境界 ^_^
本篇文章回覆於2010-12-10 16:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

叛逆之風
檢舉此回應
讚 +1
支持
感謝
本篇文章回覆於2010-12-12 22:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

FB牛頓
檢舉此回應
支持!!!
本篇文章回覆於2010-12-13 15:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

Dreamyi
捐贈 VP 給 Dreamyi 檢舉此回應
好文,推~~~
本篇文章回覆於2010-12-13 22:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

chinpig
檢舉此回應
感謝喵大..
這幾篇文章對我幫助很大

推文~~
本篇文章回覆於2010-12-23 17:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

天叢雲
捐贈 VP 給 天叢雲 檢舉此回應
推一個,您可以出一本書了。
本篇文章回覆於2011-01-11 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.