2014-11-28 6 views
0

응용 프로그램에서 현재 사용자의 프로필에 액세스하려고합니다 (읽기/쓰기). 사용자 프로필은 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

달성 방법에는 여러 가지가 있습니다. 나 자신의 프로젝트에서 사용한 적이있는 것을 나에게 알려줄 게. ...

처음에는 현재 세션 상태 (게스트, 사용자, 관리자)를 확인하는 것과 같은 인증 관련 작업을 처리하기 위해 Component을 만들었습니다.

$di->setShared('authentication', 'MyApp\Components\Authentication'); 

그래서 내가 좋아하는 등 내 컨트롤러, 뷰에서 사용할 수 있습니다 :

01 등 현재 사용자의 사양, 인증 절차, 그리고

namespace MyApp\Components; 

use Phalcon\Mvc\User\Component as PhComponent; 

class Authentication extends PhComponent 
{ 
    // ... 
} 

저장, 나는 registered this component in the main App's DI 컨테이너를했습니다

function homeAction() 
{ 
    //... 
    if($this->authentication->isGuest()) { 
    //... 
} 

마지막으로 세션을 사용하여 데이터를 저장하십시오. Phalcon은 을 제공하여 현재 세션에 모델의 직렬화 된 버전을 쉽게 저장할 수 있습니다.

class Authentication extends PhComponent 
{ 
    // ... 
    function authenticate($username, $password) 
    { 
     // ... Authentication logic 
     if($validCredentials) { 
       $this->persistent->currentUser = $userModel; 
     } 
     // ... 
    } 
} 
관련 문제