我的家庭控制器中有一些方法,例如身份验证。我不希望用户通过 url 访问身份验证。
因此,如果他直接在 url 栏中 http://domain.com/index.php/home/authenticate 输入,则应拒绝他访问或重定向到登录。
但是,如果他单击主窗体中的登录按钮,他应该能够重定向到身份验证方法。
我尝试在身份验证前面添加下划线,即
private function _authenticate() {}
它有效,我无法通过 URL 访问它,但按钮也不能重定向到身份验证方法。
example.com/index.php/home/authenticate
不访问家庭控制器的_authenticate
方法,而是寻找authenticate
方法(它们是两个不同的东西)。
如果未登录,要重定向,您将有如下内容:
public function authenticate()
{
if ($not_logged_in)
redirect('/login');
else
show_login_stuff_here();
}
当您将下划线放在方法名称前面时,您无法使用该 url 访问它,因为它无法访问。
我认为您误解了私有方法的用途。
如果身份验证是您的登录方法
- 应公开身份验证
- 成功后,用户登录并存储在会话中
- 在身份验证方法开始时,检查会话以查看用户是否已登录并采取相应操作,重定向或强制登录等
好的,
我遇到了一个解决方案。
我在表单上有输入验证,这意味着,如果用户省略文本框,他永远不会被重定向到/createaccount
因此,如果他直接访问链接,文本框将获得值 0,如果发生这种情况,则表示用户已直接访问链接。然后我将用户重定向到 404 页面。