English 中文(简体)
如何在本地环境中更改HttpApplication.User.Identity.Name?
原标题:
  • 时间:2008-10-28 17:37:08
  •  标签:

我有一个需要Windows身份验证的站点,应用程序从Security.Principal获得凭据,一旦用户通过身份验证问题是,我在本地环境中的凭据和存储在数据库中的凭据不同,无法获取用户首选项。为了解决这个问题,我正在采取以下解决方案。

    #if DEBUG
      var  myUser = userBL.GetSingle(@"desiredDomainotherUserName");
    #else 
       var myUser = userBL.GetSingle(HttpApplication.User.Identity.Name);
    #endif
        Session.Add("User",myUser);

除模拟或上述解决方法外,是否还有其他方法可以更改HttpApplication.User.Identity.Name的值?这是因为每次我需要提交到存储库或部署应用程序时,都必须更改我的代码。

最佳回答

虽然您可以更改 userBL,但为什么不改而为之修改数据库记录以反映它们在不同的域中。我假设您不会影响生产数据库,因此对于可以使数据库可用于开发/测试的清理步骤不应有任何问题。

例如。

UPDATE Users 
SET 
    UserName = REPLACE(UserName,  \ProductionDomain ,  \DevDomain )
  1. using #if DEBUG is bad for this sort of thing. Someone could/should legitimately load a debug version of code on production, and all of a sudden logins are broken. These things are better controlled in a web.config when they are needed.
  2. Developers should be working against a dev copy of the database. It is very typical to sanitize some aspects of the database when the copy is made. Sometimes this is for privacy regulations (例如。 obscuring users real names and logins)
问题回答

您是否研究过在Web.Config中使用模拟来设置您的测试凭据的ID。我假设您有一个“测试”Web.Config和一个“生产”Web.Config。这样,当您上线时,您就不必担心将其删除。

我以前用一个实用方法包装过这个。如果 HttpContext.Current 不为 null,则从其中获取。否则从 WindowsIdentity.GetCurrent() 获取。





相关问题
热门标签