C#-在自定义角色和成员身份提供程序后面形成身份验证代码
不幸的是,我在网上找到的所有带有自定义角色和成员资格提供者的表单身份验证代码的示例都是用VB.NET代码编写的,我需要C代码。请帮忙 我需要一个代码隐藏,它将执行以下操作:C#-在自定义角色和成员身份提供程序后面形成身份验证代码,c#,asp.net,forms-authentication,membership-provider,roleprovider,C#,Asp.net,Forms Authentication,Membership Provider,Roleprovider,不幸的是,我在网上找到的所有带有自定义角色和成员资格提供者的表单身份验证代码的示例都是用VB.NET代码编写的,我需要C代码。请帮忙 我需要一个代码隐藏,它将执行以下操作: 登录时对用户进行身份验证按钮单击 如果用户活动_标志=0(错误)或密码=@密码,显示错误:“访问被拒绝” 如果用户admin\u flag=1和active flag=1(true),则重定向到admin\u pages\zipsearch.aspx 如果用户admin_flag=0(false)和active_flag=
- 登录时对用户进行身份验证按钮单击
- 如果用户活动_标志=0(错误)或密码=@密码,显示错误:“访问被拒绝”
- 如果用户admin\u flag=1和active flag=1(true),则重定向到admin\u pages\zipsearch.aspx
- 如果用户admin_flag=0(false)和active_flag=1(true),则重定向到pages\zipsearch.aspx
<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false">
<LayoutTemplate>
<span class="failureNotification">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</span>
<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="LoginUserValidationGroup"/>
<div class="accountInfo">
<fieldset class="login">
<legend>Account Information</legend>
<p>
<asp:Label ID="usernameLabel" runat="server" AssociatedControlID="username">Username:</asp:Label>
<asp:TextBox ID="username" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="username"
CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:Label ID="passwordLabel" runat="server" AssociatedControlID="password">Password:</asp:Label>
<asp:TextBox ID="password" runat="server" CssClass="passwordEntry" TextMode="password"></asp:TextBox>
<asp:RequiredFieldValidator ID="passwordRequired" runat="server" ControlToValidate="password"
CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:CheckBox ID="RememberMe" runat="server"/>
<asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label>
</p>
</fieldset>
<p class="submitButton">
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
</p>
</div>
</LayoutTemplate>
</asp:Login>
提前多谢!:) 要从这里开始,请使用登录方法:
protected void LoginButton_Click(object sender, EventArgs e)
{
// Validate the user against the Membership framework user store
if (Membership.ValidateUser(UserName.Text, Password.Text))
{
// Log the user into the site
FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked);
}
// If we reach here, the user's credentials were invalid
InvalidCredentialsMessage.Visible = true;
}
您可以在authenticate方法中检查用户凭据:
protected void myLogin_Authenticate(object sender, AuthenticateEventArgs e)
{
// Get the email address entered
TextBox EmailTextBox = myLogin.FindControl("Email") as TextBox;
string email = EmailTextBox.Text.Trim();
// Verify that the username/password pair is valid
if (Membership.ValidateUser(myLogin.UserName, myLogin.Password))
{
// Username/password are valid, check email
MembershipUser usrInfo = Membership.GetUser(myLogin.UserName);
if (usrInfo != null && string.Compare(usrInfo.Email, email, true) == 0)
{
// Email matches, the credentials are valid
e.Authenticated = true;
}
else
{
// Email address is invalid...
e.Authenticated = false;
}
}
else
{
// Username/password are not valid...
e.Authenticated = false;
}
}
要根据特定角色进行重定向,请使用以下代码:
protected void Login1_LoggedIn(object sender, EventArgs e)
{
if (Roles.IsUserInRole(Login1.UserName, "Admin"))
{
Response.Redirect("~/Admin/Default.aspx");
}
else if (Roles.IsUserInRole(Login1.UserName, "User"))
{
Response.Redirect("~/User/Default.aspx");
}
else if (Roles.IsUserInRole(Login1.UserName, "Viewer"))
{
Response.Redirect("~/Viewer/Default.aspx");
}
else
{
Response.Redirect("~/Login.aspx");
}
}
编辑:
这是一个对你有用的解决方案,不是最好的代码,但仍然可以
因此,首先要使用DestinationPageUrl标记配置登录控件,如下所示:
<asp:Login
ID="Login1"
runat="server"
DestinationPageUrl="~/admin_pages/zipsearch.aspx">
</asp:Login>
@穆根,谢谢你的回复!我应该把重定向URL、admin_标志和active_标志检查放在哪里?在if(Membership.ValidateUser(UserName.Text,Password.Text))下?为什么RedirectFromLoginPage传递UserName.Text和RememberMe.Checked值,但不告诉它要重定向到哪个页面?url是登录控件名为“DestinationPageUrl”的属性,因此不必在此处设置。是的,您可以将代码放在重定向之前。请查看您的成员数据库。(您也可以创建自己的成员数据库,请参见此处:)在那里,您将找到一个名为aspnet_roles的表。在此表中,您可以定义不同的角色。VisualStudio中还有一个内置的工具来维护您的会员数据库,请参见:您可以做任何您想做的事情,会员数据库可以自由地适应您的需要。管理员可以使用Membership和Membership用户和角色类通过代码创建用户和角色。当然,您也可以像上面提到的那样使用if子句。通常,您可以在roles表中手动创建角色,然后使用createuserwizard创建用户,该向导将创建新用户并为他们提供一个角色。。。
protected void Login1_LoggedIn(object sender, EventArgs e)
{
if (Roles.IsUserInRole(Login1.UserName, "Admin"))
{
Response.Redirect("~/Admin/Default.aspx");
}
else if (Roles.IsUserInRole(Login1.UserName, "User"))
{
Response.Redirect("~/User/Default.aspx");
}
else if (Roles.IsUserInRole(Login1.UserName, "Viewer"))
{
Response.Redirect("~/Viewer/Default.aspx");
}
else
{
Response.Redirect("~/Login.aspx");
}
}
<asp:Login
ID="Login1"
runat="server"
DestinationPageUrl="~/admin_pages/zipsearch.aspx">
</asp:Login>
protected void LoginButton_Click(object sender, EventArgs e)
{
// Validate the user against the Membership framework user store
if (Membership.ValidateUser(myLogin.UserName, myLogin.Password))
{
// Username/password are valid, check email
MembershipUser currentUser = Membership.GetUser(myLogin.UserName);
if (currentUser != null)
{
if (admin_flag == true)
{
FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked);
}
else
{
// If we reach here, the user's credentials were invalid -> your access is denied message
InvalidCredentialsMessage.Visible = true;
}
}
}
//if code goes here validation of user failed
}