2016-04-19 12 views
4

Ich habe gerade mit Apigility und oAuth2 gestartet, und ich frage mich, ob es möglich ist, den aktuell authentifizierten "eingeloggt" Benutzer beim Abrufen von Informationen aus einer Datenbank zu erhalten.Aktuelle Benutzerinformationen in Apigility Ressource

Im Moment habe ich den folgenden Code:

/** 
* 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); 
} 

ich viele bereits gesucht hat, aber ich habe keine Ahnung, wie die Benutzerinformationen oder das Zugriffstoken zuzugreifen, kann ich den Request-Header analysieren müssen für Dies?

Antwort

3

Ich war auch auf der Suche nach. Ich habe keine Dokumentation darüber gefunden. Aber die Antwort ist ziemlich einfach:

Resource Klassen erbt ZF\Rest\AbstractResourceListener, die bereits eine Methode getIdentity hat.

/** 
* 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 
} 

Sie können auch getIdentity in RPC-Dienste nutzen.

Ich benutze die neueste Version von apigility.

+0

Vielen Dank! Ich habe es funktioniert. Ich könnte am Ende auch die Benutzer-ID mit '$ this-> getIdentity() -> getRoleId()' –

+0

Nizza. Das habe ich nicht bemerkt! –

3

Ich fand am Ende einen kürzeren Weg, um die Benutzer-ID zu bekommen, nur fügen Sie es als Antwort aus Gründen der Vollständigkeit.
Sie können das identity-Objekt wie @ ViníciusFagundes $this->getIdentity() erwähnt werden und dieses Identitätsobjekt hat die Funktion getRoleId(), die die Kennung des Benutzers zurückgibt.

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