0

То, что я пытаюсь сделатьПонимание ASP.NET Page жизненного цикла и на основе ролей разрешения

аутентифицировать пользователя, и перенаправить их на страницу в зависимости от их роли.

Мой вопрос

Первый раз ввода правильных учетных данных он терпит неудачу. Пользователь аутентифицирован, но, оценивая, в какой роли они находятся, ни одно из операторов 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

Используйте следующие это в 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"); 
}