我的网站应用程序主要围绕用户模型建模,其中包含大多数时间所需的所有关键数据。
一旦用户登录到网站,我希望将其作为所有控制器的持久变量。我如何实现这一点,因为我不能使用session来保存Type Model的类对象。
我的申请基于phalcon。但是欢迎任何建议。
答案 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 =>序列化用户模型