为什么Sitecore虚拟用户不更改Sitecore.Context.User?

为什么Sitecore虚拟用户不更改Sitecore.Context.User?,sitecore,sitecore6,Sitecore,Sitecore6,为什么AuthenticationManager.Login不会更改Sitecore.Context.User它始终是匿名的 string userName = string.Format("{0}\\{1}", "extranet", "Login"); Sitecore.Security.Accounts.User virtualUser = SC.Security.Authentication.AuthenticationManager.Build

为什么AuthenticationManager.Login不会更改Sitecore.Context.User它始终是匿名的

   string userName = string.Format("{0}\\{1}", "extranet", "Login");     
            Sitecore.Security.Accounts.User virtualUser =  SC.Security.Authentication.AuthenticationManager.BuildVirtualUser(userName, isAuthenticated);

 Sitecore.Security.Authentication.AuthenticationManager.Login(virtualUser.Name);
还是这是正确的行为? 在这种情况下,Sitecore如何处理对页面的访问? 谢谢。

AuthenticationManager.Login应更改用户上下文

您确定用户已登录吗

您可以检查AuthenticationManager.Login的结果值。如果用户已登录,则返回true,否则仍会看到匿名用户

下面是如何创建虚拟用户、为其分配角色并登录的示例代码:

Sitecore.Security.Accounts.User user = Sitecore.Security.Authentication
.AuthenticationManager.BuildVirtualUser(@"domain\user",true);

if(user!=null)
{
  string domainRole = @"domain\role";

  if(Sitecore.Security.Accounts.Role.Exists(domainRole))
  {
    user.Roles.Add(Sitecore.Security.Accounts.Role.FromName(domainRole));
  }

  Sitecore.Security.UserProfile profile = user.Profile;
  profile.FullName = "full name";
  profile.Save();
  Sitecore.Security.Authentication.AuthenticationManager.Login(user.Name);
}
AuthenticationManager.Login应更改上下文用户

您确定用户已登录吗

您可以检查AuthenticationManager.Login的结果值。如果用户已登录,则返回true,否则仍会看到匿名用户

下面是如何创建虚拟用户、为其分配角色并登录的示例代码:

Sitecore.Security.Accounts.User user = Sitecore.Security.Authentication
.AuthenticationManager.BuildVirtualUser(@"domain\user",true);

if(user!=null)
{
  string domainRole = @"domain\role";

  if(Sitecore.Security.Accounts.Role.Exists(domainRole))
  {
    user.Roles.Add(Sitecore.Security.Accounts.Role.FromName(domainRole));
  }

  Sitecore.Security.UserProfile profile = user.Profile;
  profile.FullName = "full name";
  profile.Save();
  Sitecore.Security.Authentication.AuthenticationManager.Login(user.Name);
}

尝试使用Sitecore.Security.Authentication.AuthenticationManager.GetActiveUser来检索登录用户。尝试使用Sitecore.Security.Authentication.AuthenticationManager.GetActiveUser来检索登录用户。我不知道为什么,但Loginuser.Name不起作用。如果它发送完整的Sitecore.Security.Accounts.user对象,则它起作用。有确实是一个覆盖方法Sitecore.Security.Authentication.AuthenticationManager.LoginUser,该方法以Sitecore.Security.Accounts.User对象为参数。修改了答案以使用RuntimeSettings我不知道为什么,但LoginUser.Name不起作用。如果它发送完整的Sitecore.Security.Accounts.User对象,则它起作用。确实存在将Sitecore.Security.Authentication.AuthenticationManager.LoginUser对象作为参数的覆盖方法Sitecore.Security.Accuonts.User。修改了答案以使用RuntimeSettings