0

私はasp.netが初めてで、問題があります。私のasp.net Webディレクトリには、ユーザー用のページと管理者用の管理フォルダーがあります。web.configファイルで認証と承認などのタグを使用して、管理者のユーザー名とパスワードを決定し、管理者のみがページを使用できることを決定しますadmin フォルダーにありますが、私の問題は、ユーザーがサインインするために Web でログイン コントロールを使用しなかったことです。この状態でどうすればそれができるか知りたいですか?誰かの体が私を助けてくれたら、とても感謝します。ユーザーは自分のメールアドレスとパスワードでサインインします。これは私のコードです:

       <tr>
        <td>
            &nbsp;Email :
        </td>
        <td class="style1">
            &nbsp;<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <br />

        </td>

    </tr>
     <tr>
        <td>
            &nbsp;
        </td>
        <td class="style1">
            &nbsp; <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                ErrorMessage="please enter your email!" 
                ControlToValidate="TextBox1" 
                Display="Dynamic" ForeColor="#CC0000" ValidationGroup="SignIn"></asp:RequiredFieldValidator>
            <br />
            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="incorrect format!" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"  Display="Dynamic"  ForeColor="#CC0000" ControlToValidate="TextBox1" ValidationGroup="SignIn"></asp:RegularExpressionValidator>
           <br />

        </td>

    </tr>
    <tr>
        <td>
            &nbsp;password:
        </td>
        <td class="style1">
            &nbsp;<asp:TextBox ID="TextBox2" runat="server" TextMode="Password" ></asp:TextBox>
           <br />
        </td>

    </tr>
     <tr>
        <td>
            &nbsp;
        </td>
        <td class="style1">
         &nbsp;
            <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ErrorMessage="Enter your password" ControlToValidate="TextBox2"  Display="Dynamic" ForeColor="#CC0000" ValidationGroup="SignIn" ></asp:RequiredFieldValidator>

        </td>

    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
        <td class="style1">
            &nbsp;<asp:Button ID="Button2" runat="server" Text="enter" 
                Width="123px" onclick="Button2_Click" ValidationGroup="SignIn" />
        </td>

私はそれを変更しました:

    protected void Button2_click(object sender, EventArgs e)
   {
     if (Membership.ValidateUser(TextBox1.Text.Trim(), TextBox2.Text.Trim()))
    {
        if (Roles.IsUserInRole(TextBox1.Text.Trim(), "Admin"))
        {
            Response.Redirect("Admin/Default.aspx");
            Session["user"] = "admin";
        }
       // ad.Text = "admin";
    }
    else
    {
      int c = -1;
    SqlConnection cn2 = new SqlConnection();
    cn2.ConnectionString = "server = . ; database = mobile_store ; Trusted_Connection=true";
    DataTable tb = new  DataTable();

    SqlCommand cmd2 = new SqlCommand();
    cmd2.Connection = cn2;
    cmd2.CommandType = CommandType.StoredProcedure;
    cmd2.CommandText = "Check_Email_Pass";
    cmd2.Parameters.AddWithValue("@mail", TextBox1.Text.Trim());
    cmd2.Parameters.AddWithValue("@pass", TextBox2.Text.Trim());
    cmd2.Parameters.Add("@res", SqlDbType.Int);    
    cmd2.Parameters["@res"].Direction = ParameterDirection.Output;

    SqlDataAdapter da = new SqlDataAdapter(cmd2);
    da.Fill(tb);
    try
    {
        cn2.Open();
        cmd2.ExecuteNonQuery();
        c = Convert.ToInt32(cmd2.Parameters["@res"].Value);

        switch (c)
        {
            case 1:
                {

                    Session["user"] = tb.Rows[0][0].ToString() + " " + tb.Rows[0][1].ToString();
                    Session["authenticate"] = true;
                    Session["id"] = Convert.ToInt32( tb.Rows[0][2]);

                    ((MasterPage)this.Master).lable2Visible = Session["user"].ToString();
                    Label2.Text = "Welcome" + " " + tb.Rows[0][0].ToString() + " " + tb.Rows[0][1].ToString();
                    TextBox1.Text = null;
                    if (Session["pagesource"] != null)
                    {
                        Response.Redirect((string)Session["pagesource"]);
                    }
                    else
                    {
                        Response.Redirect("~/user_page.aspx");
                    }

                }
                break;
            case 0:
                {
                    Label2.Text = "your password is wrong";

                }
                break;
            case 2:
                {

                    Label2.Text = "this email has registered before <br/> please sign up first";
                    TextBox3.Text = TextBox1.Text.Trim();
                }
                break;
            default:
                break;
        }

      }
    }

    catch (Exception ex)
    {
        Label1.Text = ex.ToString();

    }
    finally { cn2.Close(); }
   }

私のweb.configファイルで

     <system.Web>
    <authentication mode="Forms">
        <forms  timeout="20" slidingExpiration="true" cookieless="AutoDetect" protection="All" requireSSL="false" enableCrossAppRedirects="false" loginUrl="entrance_before_paying.aspx" >
            <credentials passwordFormat="Clear">
                <user name="elmiragolshanff@yahoo.com" password="elmira" />
            </credentials>
        </forms>
    </authentication>
    </system.web>     


        <location path="Admin">
    <system.web>
        <authorization>
            <allow users="elmiragolshanff@yahoo.com" roles="Admin" />              
        </authorization>

</location>

    </system.web>
4

2 に答える 2

1

エルマイラ、

これを実現する方法はいくつかあります。しかし、@SLaksは彼の懸念に正解です。これは、この側面で役立つ可能性のある投稿、「C#でのハッシュとソルトのパスワード」です。

C#でのハッシュとソルトのパスワード

そうは言っても、ASP.NETユーザー管理について少し読んでおくとよいと思います:「メンバーシップを使用したユーザーの管理」。

http://msdn.microsoft.com/en-us/library/tw292whz(v=vs.100).aspx

それはあなたがあなたが望むことを正確に行うことを可能にします-プロファイルに従ってリソース(ページ)へのアクセスを制限します。

于 2013-01-02T19:44:12.437 に答える
0

私はそれを変更しました.今それは正常に動作します web.configfile:

<authentication mode="Forms">
        <forms  timeout="30" loginUrl="~/entrance_before_paying.aspx" defaultUrl="Admin/Default.aspx" name=".ASPXFORMSDEMO"  cookieless="AutoDetect" protection="All"   >

        <credentials passwordFormat="Clear">
                <user name="elmiragolshanff@yahoo.com"  password="elmira" />
            </credentials>
        </forms>
    </authentication>

entry_before_paying.aspx ページの on button_click イベント:

if (FormsAuthentication.Authenticate(TextBox1.Text.Trim(), TextBox2.Text.Trim()))
   {

           Response.Redirect("Admin/Default.aspx");
            Session["user"] = "admin";     

   }
 else{ //I wrote the code to authenticate users ....}
于 2013-01-07T16:45:50.330 に答える