代码之家  ›  专栏  ›  技术社区  ›  A. M.

错误登录后CakePHP身份验证中断

  •  0
  • A. M.  · 技术社区  · 16 年前

    我有一个简单的登录表单,用户名和密码。基本上,当用户在网站上的任何位置时,他可以单击一个链接将他带到登录页面。登录后,他会被重定向到最初的页面。

    问题是:

    假设我在“/posts”页面,我点击了登录,所以现在我在“/users/login”上。 -如果登录正确,或者登录不正确,并且用户名文本框中没有填写任何内容,则一切正常(如果正确,我将重定向回“/posts”,否则我将收到“错误的用户名或密码”消息,我尝试再次正确登录,然后重定向到“/posts”;

    • 如果登录不正确,并且用户名文本框中填写了一些文本,在登录后我会收到“错误的用户名或密码”消息,这很好,但是如果我再次填写表单,无论是否正确,我都会得到“您无权访问该位置”。如果我尝试第三次登录,则登录有效,但我被重定向到“/users/posts”而不是“/posts”(存储在会话中的重定向页面的值仍然是“/posts”)。

        function beforeFilter () {
            parent::beforeFilter(); 
            $this->Auth->allowedActions = array( 'confirmation');
    
            $this->Auth->fields = array(
                'username' => 'usr_username', 
                'password' => 'usr_password'
            );
            $this->Auth->userScope = array('User.usr_confirmed' => 1);
    
            if($this->action == 'signup') {  
                $this->Auth->authenticate = $this->User;  
            }
        }
    
    function login () {
        if ( $this->Auth->user() ) {
            $this->redirect($this->Session->read('page'));
            exit();
        } 
    }
    
    function logout () {
        $this->Session->destroy('username');
        $this->redirect('/');
        exit();
    }
    
    2 回复  |  直到 16 年前
        1
  •  0
  •   Funky Dude    16 年前

    听起来您的表单操作正在重定向到限制区域。检查表单操作属性。

        2
  •  0
  •   deizel. user4815162342    16 年前

    把这个放在桌子底下 app/views/layouts/default.ctp 要帮助调试会话,请执行以下操作:

    <?php debug($session->read()); ?>
    

    这个 Auth.User Auth.redirect 键将包含上次访问的受限页面的URL,这是 AuthComponent 计划在登录后重定向到。

    page

    如果是这样,AuthComponent可以通过其 身份验证重定向 钥匙您只需链接到受限页面,而不是登录页面,然后 将自动填充该密钥,并在登录后处理重定向。

    echo $html->link('Login', array('controller' => 'users', 'action' => 'profile'));
    

    如果不是,那么为什么不考虑填充那个键呢。自从

    无论如何,这里是一个什么样的习惯 login 方法应该与您的情况类似,但是如果上面的任何建议都有效,那么您可以简单地忽略

    function login () {
        // log the user in
        if ($this->Auth->login()) {
            // your session redirect
            if ($this->Session->read('page')) {
                $this->redirect($this->Session->read('page'));
            }
            // auth's session redirect
            if ($this->Session->read('Auth.redirect')) {
                $this->redirect($this->Session->read('Auth.redirect'));
            }
            // default redirect
            $this->redirect($this->Auth->loginRedirect);
        }
    }