。Membership.GetUser()用户名; (.net 4,mvc 3)

时间:2011-09-26 15:40:20

标签: .net authentication

我使用简单的.net身份验证将用户登录到.net:

if ( Membership.ValidateUser( user, passwd ) )

工作正常。紧接着,我试着获得用户名:

Membership.GetUser().UserName

有时会返回无效对象。有时不。 我似乎无法检测到哪种模式。

例如,用户使用系统中的有效角色登录为“root”/“password”。 ValidateUser()调用成功,但Membership.GetUser()。UserName返回无效对象。 2秒后,再次执行相同的操作,验证和GetUser()都成功。

任何想法?


..编辑1 .. 这是我如何使用用户名:

Roles.GetRolesForUser( Membership.GetUser().UserName ); 

当我交换System.Environment.UserName时,角色列表返回空。

如果我保持原样并且使用'true'作为我的第二个参数设置auth cookie,它可以正常工作。

FormsAuthentication.SetAuthCookie( user, true );

如果我使用HttpContext.Current.User.Identity.Name,则角色列表可以将auth cookie设置为true或false。

现在,我理解有关性能的问题。这对我很重要。但我还需要确保应用程序正常运行。

4 个答案:

答案 0 :(得分:6)

为什么不能使用

HttpContext.Current.User.Identity.Name

答案 1 :(得分:2)

无论用户是否有效,

Membership.ValidateUser()都会返回truefalse,但不会对其进行签名。

<强> Membership.ValidateUser Method

  

验证提供的用户名和密码是否有效。

请改为尝试:

bool createPersistentCookie = true; // remember me?

if (Membership.ValidateUser(user, passwd)) {
    FormsAuthentication.SetAuthCookie(user, createPersistentCookie);
    if (FormsAuthentication.GetAuthCookie(user, createPersistentCookie) == null)
        throw new SecurityException("Authentication persistence failed");

    Membership.GetUser().UserName; // should have a value now
}
else
{
    // invalid login
}

答案 2 :(得分:1)

我使用system.web.security方法对用户进行身份验证以使用Web服务方法。 我根本不在FormsAuthentication中使用cookie身份验证。

我必须在web.config文件中设置与Web服务方法相关的角色

  <add name="rule1" url="~/WebService.svc/rest/help" method="*" role="?"/>      
  <add name="rule1" url="~/WebService.svc/rest/Method1" method="*" role="service"/>
  <add name="rule1" url="~/WebService.svc/rest/Method2" method="*" role="service"/>...

每次请求进入验证身份验证时,都会调用以下代码:

Membership.ValidateUser(username, password); //Validates user credential
Roles.IsUserInRole(username, "/WebService.svc/rest/Method2"); //Verifies User is authorised for method in question

答案 3 :(得分:0)

您是否使用Cookie来保留用户凭据?如果是这样..我认为应该采取以下认证步骤:

  1. 调用 ValidateUser 以检查是否有正确的凭据..正如您已经做的那样
  2. 调用 FormsAuthentication.SetAuthCookie 以设置身份验证Cookie
  3. Response.Redirect (“某些主页或其他主页”);将刷新凭据cookie并为您提供有效的用户对象
  4. 希望有所帮助