sitecore用户域和角色返回null

时间:2013-07-31 12:25:27

标签: login sitecore sitecore6

我有一个sitecore设置,其前端登录页面可供外网用户访问网站内的受限页面。

Extranet用户当前正在使用持久性标志等于

登录
global::Sitecore.Security.Domains.Domain domain = global::Sitecore.Context.Domain;
var isLogginedIn = AuthenticationManager.Login(domain + @"\" + email, password, true);

此操作成功并正确设置了上下文。

以下是在同一请求中登录后从即时窗口输出。

global::Sitecore.Context.User.Domain
extranet

global::Sitecore.Context.User.Roles.Count()
1

global::Sitecore.Context.User.IsAuthenticated()
true

用户登录后,用户将被重定向到他们想要访问的页面。

以下是任何后续请求的即时窗口输出

global::Sitecore.Context.User.Domain
null

global::Sitecore.Context.User.Roles.Count()
0

global::Sitecore.Context.User.IsAuthenticated()
true

任何人都有任何想法为什么我可能会在后续请求中丢失一些上下文项目?

提前致谢

3 个答案:

答案 0 :(得分:0)

看起来您正在尝试为Sitecore创建自己的登录页面。在这种情况下,您可以尝试启动logginging管道,而不是调用AuthenticationManager.Login方法:

var loggingInArgs = new LoggingInArgs
{
    Username = userName,
    Password = password,
    StartUrl = startUrl
};

Pipeline.Start("loggingin", loggingInArgs);
bool isLogginedIn = loggingInArgs.Success;

答案 1 :(得分:0)

这是一个隐藏此问题的补丁,而不是一个正确的解决方案,但我会发布任何人,以防它触发其他任何人对此有任何进一步的想法。

我在自定义管道

期间调用以下代码
if (user.Domain == null && user.IsAuthenticated)
{
   var domainUser = string.Format(@"extranet\{0}", user.LocalName);
   var membershipUser = Membership.GetUser(domainUser);

   if (membershipUser != null)
   {
      AuthenticationManager.Login(domainUser, membershipUser.GetPassword(), true);
   }
}

在调用此用户后,用户已正确设置域和角色。奇怪的是,此后的所有其他请求都有正确设置的用户。

答案 2 :(得分:0)

我遇到了这个问题,其中Domain为null且Roles为空。 原因是我使用了asp:登录控件来记录用户。当我用标准的Text,Password和Button控件替换它时,问题就消失了。