如何在前端创建特定私有资源组的用户会话?

时间:2012-11-16 16:23:23

标签: modx modx-revolution

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

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

2 个答案:

答案 0 :(得分: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站点外部进行身份验证的用户的会话创建时,我建议编写一个片段,从永久页面检查状态并将用户登录。这样会话检查将被忽略但仍然,应该实现功能目标。

答案 1 :(得分:1)

你可以用两种不同的方式做到这一点:

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

  2. 下载代码段http://modx.com/extras/package/login(由Spittingred提供,一个真正的传奇),然后查看代码。我之前没有使用过Extra,但我很确定它使用与Modx相同的用户系统,因此你应该能够达到你想要的效果。我不能给你任何帮助,而不是“查看来源并弄清楚Spittingred是如何做到的”。