![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 topcat 版主 ![]()
![]() ![]() ![]() ![]() |
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>
== 簽名檔 ==
====== 以下是簽名檔(不是回應內容) ====== 世界上有兩種東西,分享給別人後,不但不會變少,反而變更多 一個是快樂,另一個是知識 而分享知識,不但獲得更多知識,更獲得快樂~ 知識,從分享開始.... 歡迎到小喵的Blog: Topcat姍舞之間的極度凝聚 https://dotblogs.com.tw/topcat/ |
1樓
作者回應
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 ![]() ![]() |
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 ![]() ![]() |
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,找到以下這個項目,將authentication的Mode改為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 ![]() ![]() |
如果大家覺得這篇文章不錯,請按一下最上方的Facebook的讚
感恩您唷 ^_^
本篇文章回覆於2010-12-10 00:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓 |
發佈到PLURK了 感謝喵大
本篇文章回覆於2010-12-10 09:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓 |
太感謝小喵 大這麼詳細又細心的解說...........真的是太有佛心了!!!
我也按讚並且也想分享到我的 FB 給它用力推廣一下~ 哈哈~
本篇文章回覆於2010-12-10 10:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
8樓 |
了不起!!大推薦∼
了不起!!大推薦∼ 了不起!!大推薦∼
本篇文章回覆於2010-12-10 11:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
9樓
作者回應
topcat ![]() ![]() |
感恩大家的推廣與推薦
^_^
本篇文章回覆於2010-12-10 14:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
10樓 |
非常棒,已超到仙人合一的境界 ^_^
本篇文章回覆於2010-12-10 16:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
11樓 |
讚 +1
支持 感謝
本篇文章回覆於2010-12-12 22:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
12樓 |
支持!!!
本篇文章回覆於2010-12-13 15:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
13樓 |
好文,推~~~
本篇文章回覆於2010-12-13 22:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
14樓 |
感謝喵大..
這幾篇文章對我幫助很大 推文~~
本篇文章回覆於2010-12-23 17:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
15樓 |
推一個,您可以出一本書了。
本篇文章回覆於2011-01-11 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |