ASP.NET身份驗證機制membership入門——項目

轉載出自:http://www.cnblogs.com/xlb2000/archive/2010/07/31/1788120.html

  前面說了不少關於membership的內容,感受內容有點凌亂,內容都是一個個知識點,下面咱們經過一個小的項目,來把全部的相關內容串一下。html

 

  首先描述一下需求:web

  咱們要作一個最簡單的網站。有三類用戶:匿名用戶,員工,管理員,網站結構以下:sql

    

     admin目錄下的頁面只容許admin角色的用戶訪問,employee目錄下的頁面只容許emp角色的用戶訪問。Default.aspx容許全部用戶訪問。Login.aspx實現登錄功能,regUser.aspx實現註冊用戶功能。數據庫

 

  1.首先咱們新建一個網站瀏覽器

  2.進入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx這個目錄下,找到aspnet_regsql.exe,運行,並一路下一步,獲得aspnetdb數據庫cookie

  3.打開網站,打開web.config文件,配置membership:app

複製代碼
<membership defaultProvider="mySqlMembershipProvider">
      
<providers>
        
<add name="mySqlMembershipProvider"
            type
="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName
="ConnectionString"
            enablePasswordRetrieval
="false" 
            enablePasswordReset
="true" 
            requiresQuestionAndAnswer
="false" 
            applicationName
="TestMembership" 
            requiresUniqueEmail
="true" 
            passwordFormat
="Hashed" 
            maxInvalidPasswordAttempts
="5" 
            minRequiredPasswordLength
="6" 
            minRequiredNonalphanumericCharacters
="0" 
            passwordAttemptWindow
="10" 
            passwordStrengthRegularExpression
=""/>
      
</providers>
    
</membership>
複製代碼

 

  而後繼續添加鏈接字符串:less

< connectionStrings >
  
< add  name ="ConnectionString"  connectionString ="server=.;uid=sa;pwd=sa;database=aspnetdb" />
</ connectionStrings >

 

  4.接着配置roleManager:ide

複製代碼
< roleManager  enabled ="true"  defaultProvider ="myAspNetSqlRoleProvider" >
  
< providers >
    
< add  name ="myAspNetSqlRoleProvider"
         connectionStringName
="ConnectionString"
         applicationName
="TestMembership"  
         type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"   />
  
</ providers >
</ roleManager >
複製代碼

 

 

  5.接着在項目中添加兩個頁面,一個首頁Default.aspx一個登錄頁面Default.aspx,隨後繼續添加forms身份驗證的配置:post

複製代碼
< authentication  mode ="Forms" >
    
< forms  loginUrl ="Login.aspx"
           protection
="All"
           timeout
="30"
           name
=".ASPXAUTH"  
           path
="/"
           slidingExpiration
="true"
           defaultUrl
="Default.aspx"
           cookieless
="UseDeviceProfile" />
</ authentication >
複製代碼

 

  如今須要添加兩種角色employee、admin,添加角色的方法很簡單方法有不少,咱們介紹最簡單的一種:新建一個頁面,在這個頁面的page_load事件當中加入以下代碼:

 

     protected   void  Page_Load( object  sender, EventArgs e)
    {
        Roles.CreateRole(
" admin " );
        Roles.CreateRole(
" employee " );
    }

 

      瀏覽一下這個頁面就添加了這倆角色。

      添加完角色,就該實現註冊用戶功能了。

      regUser頁面代碼以下:

 

複製代碼
< %@ Page  Language ="C#"  AutoEventWireup ="true"  CodeFile ="regUser.aspx.cs"  Inherits ="regUser"  % >

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > 無標題頁 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< table  border ="0"  cellpadding ="0"  cellspacing ="0" >
    
< tr >
        
< td > 用戶名: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtName" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td > 密碼: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtPwd"  TextMode ="Password" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td > 郵箱: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtEmail" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td  colspan ="2" >< asp:Button  runat ="server"  ID ="btnReg"  Text ="註冊"  
                onclick
="btnReg_Click"   /></ td >
    
</ tr >
    
</ table >
    
</ form >
</ body >
</ html >
複製代碼

 

這是regUser.aspx.cs文件中的代碼

 

複製代碼
using  System;
using  System.Collections;
using  System.Configuration;
using  System.Data;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;

public   partial   class  regUser : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e){}
    
protected   void  btnReg_Click( object  sender, EventArgs e)
    {
        
/*  這裏僅僅是爲了演示Membership功能,因此驗證、錯誤捕獲等在此省略
         * 因爲咱們在web.config中將requiresQuestionAndAnswer設爲false
         * 因此在這裏只須要調用3個參數的重載便可
         * 
*/
        Membership.CreateUser(txtName.Text, txtPwd.Text, txtEmail.Text);
        
// 將剛剛註冊的用戶添加Employee角色
        Roles.AddUserToRole(txtName.Text,  " employee " );
        
// 註冊成功,將用戶跳轉到默認頁面
        
// 所謂默認頁面,就是在前面配置時forms節點下defaultUrl指定的頁面
        FormsAuthentication.RedirectFromLoginPage(txtName.Text,  false );
    }
}
複製代碼

 

   ok,註冊功能已經差很少了,如今咱們開始完成登陸頁面。

  打開Login.aspx頁面,加上以下代碼:

 

複製代碼
< %@ Page  Language ="C#"  AutoEventWireup ="true"  CodeFile ="Login.aspx.cs"  Inherits ="Login"  % >

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > 無標題頁 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< table  border ="0"  cellpadding ="0"  cellspacing ="0" >
    
< tr >
        
< td > 用戶名: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtName" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td > 密碼: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtPwd"  TextMode ="Password" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td  colspan ="2" >< asp:Button  runat ="server"  Text ="登陸"  ID ="btnLogin"  
                onclick
="btnLogin_Click"   /></ td >
    
</ tr >
    
</ table >
    
</ form >
</ body >
</ html >
複製代碼

 

Login.aspx.cs代碼以下:

 

複製代碼
using  System;
using  System.Collections;
using  System.Configuration;
using  System.Data;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;

public   partial   class  Login : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e){ }
    
protected   void  btnLogin_Click( object  sender, EventArgs e)
    {
        
if  (Membership.ValidateUser(txtName.Text, txtPwd.Text))
        {
            
// 登陸成功向瀏覽器寫入身份票據
            FormsAuthentication.SetAuthCookie(txtName.Text,  false );
            
// 跳轉回最初請求的url或是默認url
            
// 注:所謂最初請求的url是指:若是我未經登陸,
            
// 直接訪問admin/admin.aspx這個頁面,那麼將會跳轉到該登陸頁面
            
// 若是登陸成功,則此方法將會以登陸用戶的身份跳轉回
            
// admin/admin.aspx頁面
            FormsAuthentication.RedirectFromLoginPage(txtName.Text,  false );
        }
        
else
        {
            ClientScript.RegisterStartupScript(
this .GetType(),  "" " alert('用戶名或密碼錯誤!'); " true );
        }
    }
}
複製代碼

 

 

   好了,註冊和登陸都已經完成了,剩下的任務就是配置訪問權限這一項了,其實很簡單:在admin和employee目錄下分別添加兩個web.config文件

admin目錄下的web.config內容以下:

 

複製代碼
< configuration >
    
< appSettings />
    
< connectionStrings />
    
< system.web >
      
< authorization >
        
< allow  roles ="admin" />
        
< deny  users ="*" /> <!-- *表明的是全部用戶 -->
      
</ authorization >
    
</ system.web >
</ configuration >
複製代碼

 

  表示全部具備admin角色的用戶容許訪問,除此以外所有拒絕訪問。

employee目錄下的web.config內容以下:

 

複製代碼
< configuration >
    
< appSettings />
    
< connectionStrings />
    
< system.web >
      
< authorization >
        
< allow  roles ="employee" />
        
< deny  users ="*" />
      
</ authorization >
    
</ system.web >
</ configuration >
複製代碼

  同admin目錄下的配置,*是通配符,表明全部用戶,?表明全部匿名用戶 

 

 

  好了,到這裏,咱們實現的功能有:登陸,註冊,權限控制。一個網站所須要的功能基本上都已經實現了,項目有點簡單,可是功能齊全。通常來講80%的站點使用membership就足夠了。好了,本項目到此結束。

相關文章
相關標籤/搜索