我有一个会员页面。我希望只有在用户登录时才能看到内容。
我考虑通过管理员隐藏页面内容。但是,我希望在未登录时在此页面上显示其他表单和内容。
我考虑过使用memberprofiles模块,但是我想学习如何自己动手,这样我就能更好地理解控制器和Silverstripe安全性。
目前,模板如下所示:
<% if CurrentMember %>
LOGGED IN
<% else %>
You must login to proceed:
$LoginForm
<% end_if%>
当没有登录时,我正在调用$ LoginForm。
当我输入错误的详细信息时,表单会将我重定向到“找不到页面”。我没有扩展登录表单,也没有以任何方式更改它。
找不到页面时的成员页面网址:
localhost:8888/site-name/members/login#MemberLoginForm_LoginForm_tab
不确定该网页未重定向到安全/登录的原因。
期望的结果:
当用户正确输入详细信息时,会重定向到当前页面,但现在内容可见
当用户输入错误信息时,会重定向回登录表单并显示相关错误。
答案 0 :(得分:4)
问题出在MemberLoginForm
第177行:
// Show the right tab on failed login
$loginLink = Director::absoluteURL($this->controller->Link('login'));
它希望将您发送到当前控制器的login/
操作(ContentController::LoginForm()
传递给它)。我非常确定这是一个功能,而不是一个错误,因为如果您使用Security
之外的登录表单,那么您可能希望将该用户留在该部分中而不是将它们放到一个单独的模板中。
在任何情况下,最简单的解决方法就是在显示表单的控制器上添加login
$allowed_action
。
class MyPage_Controller extends Page_Controller
{
private static $allowed_actions = ['login'];
}
如果您要在每个页面上显示该表单,请将该操作添加到Page_Controller
,以便所有继承者都将其列入白名单。