Phalcon在所有控制器中保持一个持久的模型?

时间:2015-10-23 08:58:14

标签: oop model-view-controller phalcon

我的网站应用程序主要围绕用户模型建模,其中包含大多数时间所需的所有关键数据。

一旦用户登录到网站,我希望将其作为所有控制器的持久变量。我如何实现这一点,因为我不能使用session来保存Type Model的类对象。

我的申请基于phalcon。但是欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

我建议你写一个简单的用户认证课程。其他用户数据操作,我写了这个Component并在我的项目中使用:

use Phalcon\Mvc\User\Component;

class Auth extends Component {

    public function login($credentials) {

        if(!isset($credentials['email'],$credentials['password'])) {
            return FALSE;
        }

        if($this->isAuthorized()) {
            return true;
        }

        $user = Users::findFirstByEmail($credentials['email']);

        if($user == false) {
           //block user for seconds

           return false; 
        }
        if($this->security->checkHash($credentials['password'],$user->password) && $user->status == 1) {
            $this->_saveSuccessLogin($user);
            $this->_setUserLoginSession($user);
           return true; 
        } else {

            return false;
        }


    }

    public function isAuthorized() {
        return $this->session->has('auth');
    }

    public function logout() {
        $this->session->remove('auth');
        return true;
    }

    public function user($key = null) {
        if(!$this->isAuthorized()) {
            return null;
        }

        if(is_null($key)) {
            return $this->session->get('auth');            
        } else {
            $user = $this->session->get('auth'); 
            return array_key_exists($key, $user) ? $user[$key] : null;
        }
    }

    private function _saveSuccessLogin(Users $user){
        $userLogin = new UserLogins();

        $userLogin->user_id = $user->id;
        $userLogin->ip = $this->request->getClientAddress();
        $userLogin->user_agent = $this->request->getUserAgent();
        $userLogin->dns = gethostbyaddr($userLogin->ip);

        if(!$userLogin->save()) {
            return false;
        }
        return true;
    }

    private function _setUserLoginSession(Users $user) {
        if(!$user) {
            return false;
        }
        $this->session->set('auth',array(
            'id' => $user->id,
            'firstname' => $user->firstname,
            'lastname' => $user->lastname,
            'email' => $user->email,
            'role_id' => $user->role_id
        ));

        return true;
    }
}

在我的services.php中添加了DI代码:

$di->setShared('auth', function () {
    return new Auth();
});

因此,当我想获取用户信息时,我使用此信息:

$this->auth->user('email')

此外,您还可以为此组件添加更多功能。修改它。

我希望这对你有用。

答案 1 :(得分:0)

您可以使用memcached并将其另存为key =>值: userId =>序列化用户模型