我想做什么
对用户进行身份验证,并根据用户的角色将其重定向到某个页面。
我的问题
第一次输入正确的凭据时,它失败了。用户已通过身份验证,但在评估他们所处的角色时,没有if语句为真。第二次(在回发后)它按预期工作。
我的问题
为什么这不起作用;为什么我必须在设置角色之前对用户进行身份验证并进行回复?
代码
Private Sub Login1_Authenticate(sender As Object, e As AuthenticateEventArgs) Handles Login1.Authenticate
If Membership.ValidateUser(Login1.UserName, Login1.Password) Then
FormsAuthentication.SetAuthCookie(Login1.UserName, False)
ToPage()
End If
End Sub
Private Sub ToPage()
If User.IsInRole("Role1") Then
Response.Redirect("~/Page1.aspx")
End If
If User.IsInRole("Role2") Then
Response.Redirect("~/Page2.aspx")
End If
If User.IsInRole("Role3") Then
Response.Redirect("~/Page3.aspx")
End If
End Sub
答案 0 :(得分:0)
使用以下内容在c#中转换为VB
if (Membership.ValidateUser(username , password))
{
FormsAuthentication.SetAuthCookie(username, true);
var roles = Roles.GetRolesForUser(username);
var identity = new GenericIdentity(username);
var principal = new GenericPrincipal(identity, roles);
Context.User = principal;
// Now you can use Context.User
if (User.IsInRole("Role1"))
{
Response.Redirect("~/Page1.aspx")
}
else if(User.IsInRole("Role2"))
{
Response.Redirect("~/Page2.aspx")
}
else
{
Response.Redirect("~/default.aspx")
}
}
您也可以使用以下
if (Membership.ValidateUser(username , password))
{
FormsAuthentication.SetAuthCookie(username, true);
var roles = Roles.GetRolesForUser(username );
if(roles.Contains("Role1"))
Response.Redirect("~/Page1.aspx");
else if(roles.Contains("Role2")) // check for other roles
Response.Redirect("~/Page2.aspx");
else
Response.Redirect("~/default.aspx");
}