0

我有许多扩展BaseAuthenticate类的身份验证组件。这些都是以正常方式在 AppController 中设置的。

身份验证组件是否可以更改 AuthComponent 的 loginRedirect 变量?

为了澄清这种情况,我的一个身份验证组件查看了用户的某个子集。在检查该人是否有任何未结发票之前,它会检查凭据是否有效。根据突出的价值,我想将用户重定向到给定的页面或完全阻止它们。

谢谢

4

2 回答 2

1

是的,这是可能的。AuthComponent 的重定向位置只是一个会话变量(因此从技术上讲,它可以在任何地方设置)。

要更改重定向位置,您可以手动设置:

$this->Session->write('Auth.redirect', 'http://example.com');

在下一个请求中,它们将被 AuthComponent 重定向。

或者,让您的组件在那时和那里重定向它们:

$this->_Collection->getController()->redirect('http://example.com');
于 2012-10-17T14:22:41.470 回答
0

非常感谢@jerermyharris 将我推向正确的方向。这与我最终做的事情有关。

1.扩展了AuthComponent

    App::uses('AuthComponent', 'Controller/Component');

    class MyAuthComponent extends AuthComponent {

      var $components = array('Session'); 

      public function identify(CakeRequest $request, CakeResponse $response) {
        if (empty($this->_authenticateObjects)) {
            $this->constructAuthenticate();
        }
        foreach ($this->_authenticateObjects as $auth) {
            $result = $auth->authenticate($request, $response);
            if (!empty($result) && is_array($result)) {
                if(isset($result['Redirect']))
                {
                    $this->Session->write('Auth.redirect', $result['Redirect']);            
                }
                return $result;
            }
        }
        return false;
      }
    }

2. 添加这个 AppController 组件

public $components = array(
        'Auth' => array(
            'className' => 'MyAuth',
        )
);

围绕您对 AuthComponent 的任何其他定义添加这一点。

3. 从您的身份验证组件返回重定向

App::uses('BaseAuthenticate', 'Controller/Component/Auth');

class TutorAuthenticate extends BaseAuthenticate {

    public function authenticate(CakeRequest $request, CakeResponse $response) {
        $user = ...... // However you authenticate your user
        $user['Redirect'] = "http://example.com";
        return $user;
    }
}

所以现在如果你想基于用户进行重定向,你可以添加它,如果你不这样做,那么 cake 将遵循你在 AppController 中设置的指令。

哇,这似乎我不得不做额外的工作,但这是正确的做法。

于 2012-10-18T15:50:54.813 回答