我的CakePHP会话登录是否安全?

时间:2014-02-21 01:17:52

标签: php session cakephp

我不知道如何使用AuthComponent然后这是我用多个角色进行用户身份验证的方式如下:

有三个角色:管理员,转售和客户......每个角色有一个控制器,用于个人视图,这是我对每个角色/控制器的beforeFilter

AdministratorsController:

function beforeFilter(){
    if (!$this->isAuth('Administrator'))
        $this->redirect('/');
}

AppController:

function isAuth($strRole = NULL){
    $data = $this->Session->read('User'); 

    if (!$this->Session->check('User') || (!is_null($strRole) && $data['Role']['nome'] != $strRole))
        return false;

    return true;
}

UsersController我只进行身份验证检查是否存在$this->Session->read('User'),如果用户存在,他会获取所有信息并按照以下方式输入会话:$this->Session->write('User', $user);假设$user是来自Model的查找,包含所有用户信息。

问题是,我会遇到问题吗?是对的吗”?不知道我是否清楚,如果缺少信息,请问..

1 个答案:

答案 0 :(得分:1)

你正在复制框架已经为你实现的逻辑。

请参阅http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html#authorization-who-s-allowed-to-access-what

取自该页面(您仍然应该阅读它。):

public function isAuthorized($user) {
    // Admin can access every action
    if (isset($user['role']) && $user['role'] === 'admin') {
        return true;
    }

    // Default deny
    return false;
}

用户数据传递给它,无需自己获取用户数据。

如果您需要获取用户数据,请使用$ this-> Auth-> user():

// Some field
$this->Auth->user('someField');
// Whole data
$this->Auth->user();

如果会话密钥由于某种原因而发生变化,所有直接调用Session-> read('User')都会遇到麻烦。这里一个好的而不是不太可能的例子是当应用程序必须使用会话的第二个auth适配器进行扩展时。 Auth将了解数据,Session不会拥有它。