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

作者:   來源: 博客園  發布時間: 2010-08-01 21:49  閱讀: 1841 次  推薦: 0   原文鏈接   [收藏]  

  前面說了很多關于membership的內容,感覺內容有點凌亂,內容都是一個個知識點,下面我們通過一個小的項目,來把所有的相關內容串一下。

  首先描述一下需求:

  我們要做一個最簡單的網站。有三類用戶:匿名用戶,員工,管理員,網站結構如下:

    

  admin目錄下的頁面只允許admin角色的用戶訪問,employee目錄下的頁面只允許emp角色的用戶訪問。Default.aspx允許所有用戶訪問。Login.aspx實現登陸功能,regUser.aspx實現注冊用戶功能。

  1.首先我們新建一個網站

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

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

<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>

  然后繼續添加連接字符串:

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

  4.接著配置roleManager:

<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身份驗證的配置:

<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就足夠了。好了,本項目到此結束。

0
0
 
標簽:ASP.NET
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()