cakefp auth getuser in beforefilter

时间:2014-06-11 10:31:48

标签: php cakephp authentication

在我的cakephp应用程序中使用自定义身份验证实现(请参阅here)我想在beforefilter方法中检查用户的身份验证,如果他/她未经过身份验证,我想手动呈现错误页面并退出。我的问题是,在动作调用需要auth的动作之后,auth对象似乎只被数据填充。我需要在我的beforefilter函数中访问auth数据。怎么实现这个?如果我尝试访问它auth-> user()它返回NULL,loggedIn()返回总是false(因为没有数据,有意义)

4 个答案:

答案 0 :(得分:3)

无需检查用户是否经过身份验证并显示错误页面。只需将unauthenticated()方法添加到自定义身份验证类,就像BasicAuthenticate类一样(不设置标题)。使用异常渲染器的错误处理程序将生成相应的错误页面。

答案 1 :(得分:3)

我偶然发现了这个问题,提议的解决方案对我来说无效。

在Cakephp 3中获取autFilter中的auth信息的正确方法是调用

$this->Auth->config('checkAuthIn', 'Controller.initialize');

加载auth组件后立即

。这在无状态身份验证方案(例如令牌身份验证)中特别有用。

然后,您可以通过调用

在beforeFilter中获取用户信息

$user = $this->Auth->user();

查看文档http://book.cakephp.org/3.0/en/controllers/components/authentication.html#deciding-when-to-run-authentication

答案 2 :(得分:2)

来自manual

class CustomAuthenticate extends BaseAuthenticate {
    public function authenticate(CakeRequest $request, CakeResponse $response) {
        // Return an array of user if they could authenticate the user,
        // return false if not
    }
}

authenticate方法应该返回一个包含用户数据的数组。从你的链接到另一个问题似乎它没有

答案 3 :(得分:0)

在CakePHP 2.x中,可以做到这一点

$this->Auth->startup($this);