2016-04-19 3 views
4

Я только что начал с Apigility и oAuth2, и мне было интересно, можно ли получить аутентифицированный пользователь «loggedin», прошедший аутентификацию, при получении информации из базы данных.Получить текущую информацию о пользователе в ресурсе Apigility

настоящее время у меня следующий код:

/** 
* Fetch all or a subset of resources 
* 
* @param array $params 
* @return mixed 
*/ 
public function fetchAll($params = array()) 
{ 
    var_dump($params); 
    // Using Zend\Db's SQL abstraction 
    $sql = new \Zend\Db\Sql\Sql($this->db); 
    //I would like to get the currently logged in user here... but how? 
    $select = $sql->select('projects')->where(array('userid' => 1));; 

    // This provides paginated results for the given Select instance 
    $paged = new \Zend\Paginator\Adapter\DbSelect($select, $this->db); 

    // which we then pass to our collection 
    return new ProjectsCollection($paged); 
} 

Я сделал много поиска уже, но я не имею понятия, как получить доступ к информации пользователя или маркер доступа, нужно ли мне разобрать заголовок запроса для это?

ответ

3

Я также искал его. Я не нашел никакой документации об этом. Но ответ довольно прост:

Классы ресурсов наследуют ZF\Rest\AbstractResourceListener который уже имеет способ getIdentity.

/** 
* Fetch all or a subset of resources 
* 
* @param array $params 
* @return mixed 
*/ 
public function fetchAll($params = array()) 
{ 
    // if user isn't authenticated return nothing 
    if(!$this->getIdentity() instanceof ZF\MvcAuth\Identity\AuthenticatedIdentity) { 
     return []; 
    } 

    // this array returyour query here using $userIdns the authentication info 
    // in this case we need the 'user_id' 
    $identityArray= $this->getIdentity()->getAuthenticationIdentity(); 

    // note, by default user_id is the email (username column in oauth_users table) 
    $userId = $identityArray['user_id']; 

    // fetch all using $userId 
} 

Вы также можете использовать getIdentity в RPC услуг.

Я использую последнюю версию apigility.

+0

Большое вам спасибо! Я заставил его работать. В конце концов, я мог бы получить идентификатор пользователя с '$ this-> getIdentity() -> getRoleId()' –

+0

Nice. Я этого не замечал! –

3

В конце концов я нашел более короткий способ получить идентификатор пользователя, просто добавив его в качестве ответа ради полноты.
Вы можете получить объект identity, такой как @ ViníciusFagundes, упомянутый $this->getIdentity(), и этот объект идентификации имеет функцию getRoleId(), которая возвращает идентификатор пользователя.

$user_id = $this->getIdentity()->getRoleId();