我想访问应用程序中当前用户的配置文件(读/写)。用户配置文件是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']);
}
}
}
答案 0 :(得分:0)
有几种方法可以实现这一目标。让我与你分享我在自己的项目中使用过的那个......
首先,我创建了一个Component来处理与身份验证相关的事情,例如检查当前会话状态(访客,用户,管理员),存储当前用户规范,身份验证程序等。
namespace MyApp\Components;
use Phalcon\Mvc\User\Component as PhComponent;
class Authentication extends PhComponent
{
// ...
}
然后,我registered this component in the main App's DI容器:
$di->setShared('authentication', 'MyApp\Components\Authentication');
所以我可以使用我的控制器,视图等。例如:
function homeAction()
{
//...
if($this->authentication->isGuest()) {
//...
}
最后使用会话存储数据。 Phalcon提供persistent session bag,您可以使用它在当前会话中轻松存储模型的序列化版本:
class Authentication extends PhComponent
{
// ...
function authenticate($username, $password)
{
// ... Authentication logic
if($validCredentials) {
$this->persistent->currentUser = $userModel;
}
// ...
}
}