0

我有一个完整的网站,其中包含两种不同语言的两种上下文。唯一的公共页面是两种语言的登录页面。其余的应该是私有的/受保护的。这是我通过资源组和匿名用户限制实现的。在登录页面上,匿名用户应该可以看到所有受保护的菜单条目,如果单击,应该会显示一个带有两个登录表单的弹出窗口。这些登录表单来自其他站点,如果用户在输入凭据时是否具有权限,它们将返回。只要这个会话存在,如果用户当然被批准,用户应该能够查看所有页面。

我作为非 modx- 或 php- pro 的猜测是,我应该在加载登录页面(以及所有子页面)时检查会话是否存在。如果没有用户登录,所有链接都将指向弹出窗口。然后用户登录,将信息发送到外部服务器,如果成功,将被重定向到私有/受保护的登录页面。这就是我找不到任何信息的原因,可能是因为我不完全确定要寻找什么。我需要一个片段来检查受保护页面是否存在有效会话,如果不显示登录名。如果外部登录成功,我需要的其他代码是为用户创建会话的代码。这应该是服务器上的一个片段还是只是一个 php 文档。以及如何为受保护页面启动会话?

4

2 回答 2

1

MODX Revolution 在尝试访问受保护的页面时检查用户是否已登录,但如果您想手动检查,此代码段将执行以下操作:

 if (!$modx->user->hasSessionContext($modx->context->get('key'))) {
    $modx->sendUnauthorizedPage(); // redirect to the informative page for non-logged users
}

如果您需要检查正在登录的用户并在没有登录的情况下显示登录弹出窗口,那么使用带有简单用户 ID 检查的输出修饰符可能会起作用:

[[+modx.user.id:if=`[[+modx.user.id]]`:eq:=`0`:then=`Not logged in`:else=`logged in`]]

当它为从 MODX 站点外部验证的用户创建会话时,我建议编写一个片段来检查来自永恒页面的状态并登录用户。这样会话检查将被省略,但仍然是功能目标应该达到。

于 2012-11-16T17:54:14.977 回答
1

您可以通过两种不同的方式执行此操作:

  1. 创建一个未连接到 Modx 的用户系统。我发现这很容易,而且我之前已经做过好几次了。您需要为具有用户名和密码的用户创建一个表,并从中创建一个对象,以便您可以使用 xpdo 进行查询。随着这个系统启动并运行,在每个模板中包含一个片段以确保用户确实登录是没有问题的。如果没有,只需将他重定向到正确的首页/登录页面。这将需要一些编码,但正如我所说,它就像一个魅力。

  2. 下载代码片段http://modx.com/extras/package/login(来自 Spittingred,一个真正的传奇人物),然后查看代码。我以前没有使用过这个 Extra,但我很确定它使用与 Modx 相同的用户系统,因此你应该能够实现你想要的。除了“查看源代码并弄清楚 Spittingred 是如何做到的”之外,我无法为您提供更多帮助。

于 2012-11-18T03:03:29.480 回答