Php Silverstripe:$LoginForm-登录失败时未找到页面

Php Silverstripe:$LoginForm-登录失败时未找到页面,php,content-management-system,silverstripe,Php,Content Management System,Silverstripe,我有一个会员页面。我希望内容仅在用户登录时可见 我考虑过通过管理员隐藏页面内容。然而,我想有其他形式,并在此网页上的内容时,没有登录 我已经考虑过使用memberprofiles模块,但是我想自己学习如何这样做,以便更好地了解控制器和Silverstripe安全性 当前,模板如下所示: <% if CurrentMember %> LOGGED IN <% else %> You must login to proceed: $LoginForm

我有一个会员页面。我希望内容仅在用户登录时可见

我考虑过通过管理员隐藏页面内容。然而,我想有其他形式,并在此网页上的内容时,没有登录

我已经考虑过使用memberprofiles模块,但是我想自己学习如何这样做,以便更好地了解控制器和Silverstripe安全性

当前,模板如下所示:

<% if CurrentMember %>
    LOGGED IN
<% else %>
    You must login to proceed:
    $LoginForm
<% end_if%>

登录
您必须登录才能继续:
$LoginForm
未登录时,我将调用$LoginForm

当我输入的详细信息不正确时,表单会将我重定向到“未找到页面”。我没有扩展登录表单,也没有以任何方式更改它

未找到页面时的成员页面URL:

localhost:8888/站点名称/成员/登录#成员登录信息#登录信息#选项卡

不确定页面为什么没有重定向到安全/登录

期望的结果:

  • 当用户正确输入详细信息时,它会重定向到当前页面,但现在内容是可见的

  • 当用户输入的详细信息不正确时,它会重定向回登录表单并显示相关错误


问题出现在
MemberLoginForm
第177行:

    // Show the right tab on failed login
    $loginLink = Director::absoluteURL($this->controller->Link('login'));
它希望将您发送到当前控制器的
login/
操作(将
ContentController::LoginForm()
传递给它)。我很确定这是一个特性,而不是一个bug,因为如果您在
安全性
之外使用登录表单,您可能希望将用户保留在该部分,而不是将其丢弃到单独的模板中

在任何情况下,最简单的修复方法就是在显示表单的控制器上添加
登录
作为
$allowed\u操作

class MyPage_Controller extends Page_Controller
{
  private static $allowed_actions = ['login'];
}

如果要在每页上显示表单,则只需将该操作添加到
page\u Controller
,以便所有继承人都将其列入白名单。

问题出现在
MemberLoginForm
第177行:

    // Show the right tab on failed login
    $loginLink = Director::absoluteURL($this->controller->Link('login'));
它希望将您发送到当前控制器的
login/
操作(将
ContentController::LoginForm()
传递给它)。我很确定这是一个特性,而不是一个bug,因为如果您在
安全性
之外使用登录表单,您可能希望将用户保留在该部分,而不是将其丢弃到单独的模板中

在任何情况下,最简单的修复方法就是在显示表单的控制器上添加
登录
作为
$allowed\u操作

class MyPage_Controller extends Page_Controller
{
  private static $allowed_actions = ['login'];
}

如果要在每个页面上显示表单,则只需将该操作添加到
page\u Controller
,以便所有继承者都将其列入白名单。

非常好。这非常有效。谢谢你的解释,太好了。这非常有效。谢谢你的解释。