我想访问整个应用程序中当前用户的配置文件(读/写)。用户配置文件是User
模型的实例。是否可以将其作为服务存储在会话中?如果没有,最佳实践是什么?这是我的登录代码。(基于 AJAX 的登录)
function loginAction()
{
$this->view->disable();
{
$request = (array)$this->request->getJsonRawBody();
$user = User::findFirstByUsername($request['username']);
if (password_verify($request['password'], $user->password)) {
$userModel = User::findFirst('username="'.$request['username'].'"');
$this->getDI()['session']->set('auth', $user->id);
$this->user = $user;
jsonResponse($user);
} else {
http_response_code(401);
jsonResponse(['message' => 'invalid']);
}
}
}
有几种方法可以实现这一点。让我与您分享我在自己的项目中使用的那个......
首先,我创建了一个组件来处理与身份验证相关的事情,例如检查当前会话状态(来宾、用户、管理员)、存储当前用户规范、身份验证过程等。
namespace MyApp'Components;
use Phalcon'Mvc'User'Component as PhComponent;
class Authentication extends PhComponent
{
// ...
}
然后,我在主应用的 DI 容器中注册了此组件:
$di->setShared('authentication', 'MyApp'Components'Authentication');
所以我可以从我的控制器、视图等使用。喜欢:
function homeAction()
{
//...
if($this->authentication->isGuest()) {
//...
}
最后使用会话存储数据。Phalcon 提供了一个持久会话包,可用于在当前会话中轻松存储模型的序列化版本:
class Authentication extends PhComponent
{
// ...
function authenticate($username, $password)
{
// ... Authentication logic
if($validCredentials) {
$this->persistent->currentUser = $userModel;
}
// ...
}
}