防止直接访问codeigniter中的特定功能

时间:2012-05-28 14:46:52

标签: php codeigniter

我的Home控制器中有一些方法,例如authenticate。我不希望用户通过url访问身份验证。

因此,如果他直接在网址栏中输入http://domain.com/index.php/home/authenticate,他将被拒绝访问或重定向到登录。

但是,如果他点击主窗体中的登录按钮,他应该能够被重定向到authenticate方法。

我试过添加一个认证的下划线,即

private function _authenticate() {}

它有效,我无法通过URL访问它,但按钮也不能重定向到authenticate方法。

3 个答案:

答案 0 :(得分:0)

example.com/index.php/home/authenticate无法访问家庭控制器的_authenticate方法,它正在寻找authenticate方法(它们是两个不同的方法)。

要重定向,如果没有登录,你会有类似的东西:

public function authenticate()
{
  if ($not_logged_in)
    redirect('/login');
  else
    show_login_stuff_here();
}

答案 1 :(得分:0)

当您将下划线放在方法名称前面时,您无法使用该URL访问它,因为它无法访问。

我认为你误解了私有方法的用途。

如果身份验证是您的登录方式

  1. 你应该公开身份验证
  2. 成功时将用户登录并存储在会话中
  3. 在authenticate方法的开头检查会话以查看用户是否已登录并采取相应措施,重定向或强制登录等

答案 2 :(得分:0)

好的,我已经找到了解决方案。

我在表单上输入了验证,这意味着,如果用户省略了文本框,他将永远不会被重定向到/ createaccount

因此,如果他确实直接访问链接,则文本框的值为0,如果发生这种情况,则表示用户已直接访问该链接。我将用户重定向到404页面。