2011-01-11 117 views
1

我想根据他们在asp.net成员资格提供程序中的角色来重定向人员。我在登录页面的'OnLoggedIn'事件中有一些代码。这是我到目前为止所尝试的,并没有什么不起作用:登录页面上的OnLoggedIn事件ASP.NET

以下代码在.IsAuthenticated步骤返回false,它表示用户未通过身份验证。在登录页面的哪一步用户通过身份验证,我认为'OnLoggedIn'事件是正确的。

if (HttpContext.Current.User != null) 
{ 
    if (HttpContext.Current.User.Identity.IsAuthenticated) 
    { 
     if (HttpContext.Current.User.Identity is FormsIdentity) 
     { 
     } 
    } 
} 

我试过第二件事就是获得该用户的所有角色,但它不返回任何东西,返回一个字符串的空数组,而我检查了角色分配给特定的用户数据库。这里是我正在尝试:

string[] userRole = Roles.GetRolesForUser(LoginUser.UserName); 

所以,我的问题是如何获得的登录页面上的角色,我需要检查在其他一些事件或一些其他的方式。 感谢您的帮助提前,Laziale

回答

0

,如果你有比

你可以使用一个开关情况下,一些预定义的像(超级管理员,管理员,用户,....)规则

和根据认证级别

可以分类/与各自相应的URL重定向用户

2

第一种情况是行不通的,因为它返回它排在请求的价值。与FormsA进行登录uthentication基本上只是在响应中设置一个cookie,以便下一个请求获取正确的用户。

第二种情况应该工作虽然,假设LoginUser是您的登录控制的名称。

+0

我明白了......我只是对此感到不安。 – Merritt 2012-03-14 19:25:48

0

Greg完全正确。所以问题是为什么角色没有被返回?根据您在web.config中如何在角色提供者设置中创建角色,可能有几个原因。

因此,请确保您的角色提供者指向相同的数据库,您可以看到角色。 同时检查你是不是使用不同的角色提供者来创建角色,而是通过不同的角色来访问它。如果您在web.config中有多个角色提供程序,则可能会发生这种情况。

另请检查它是否不是applicationName issue

如果这无助于发布您的web.config角色设置以及有关您如何创建角色的信息。