2

我有一个带有前端登录页面的站点核心设置,供外网用户访问站点内的受限页面。

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

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

提前致谢

4

3 回答 3

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);
   }
}

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

于 2013-08-01T14:18:25.220 回答
0

我遇到了 Domain 为空且 Roles 为空的确切问题。原因是我使用了 asp:Login 控件来登录用户。当我用标准的文本、密码和按钮控件替换它时,问题就消失了。

于 2014-11-15T20:43:06.453 回答
0

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

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

Pipeline.Start("loggingin", loggingInArgs);
bool isLogginedIn = loggingInArgs.Success;
于 2013-07-31T12:35:33.817 回答