我使用简单的.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。
现在,我理解有关性能的问题。这对我很重要。但我还需要确保应用程序正常运行。
答案 0 :(得分:6)
为什么不能使用
HttpContext.Current.User.Identity.Name
答案 1 :(得分:2)
Membership.ValidateUser()
都会返回true
或false
,但不会对其进行签名。
<强> 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来保留用户凭据?如果是这样..我认为应该采取以下认证步骤:
希望有所帮助