Puncte:0

Cum să obțineți tokenul jwt de utilizator actual?

drapel ni

Într-un modul personalizat, trebuie să obțin jetonul jwt (access_token) legat de utilizatorul curent. În urma acestui lucru problema Am încercat să-l obțin, dar fără succes, deoarece get_jwt_key() și jwt_token_params() nu sunt definite și nu pot găsi unde sunt definite:

utilizați \Firebase\JWT\JWT;
...    
funcția publică getAccessToken() {
  $uid = \Drupal::currentUser()->id();
  // Adăugați tokenul de acces JWT
  $key = get_jwt_key(); //cheie pentru generarea jetonului jwt
  $token = jwt_token_params($uid); // parametrii care urmează să fie adăugați în token.
  $access_token = JWT::encode($token, $cheie);
  returnează $access_token;
}

Am incercat doar cu:

$access_token = $this->jwtAuth->generateToken();

Dar nu am găsit cum să inițializez serviciul $jwtAuth pentru a genera simbolul. Vreo idee?

Puncte:2
drapel us

Codul afișat în comentariu #2 în Obțineți purtătorul de token cu modulul JWT după metoda de autentificare rest este codul pentru o clasă de abonați la eveniment. Ceea ce acest comentariu nu arată este definiția serviciului de abonat la eveniment.

După cum este descris în Abonați-vă și expediați evenimente / Drupal 8 Events, fișierul .services.yml ar trebui să conțină linii similare cu următoarele. (A inlocui MODULUL TĂU cu numele mașinii modulului și CLASA TA cu numele clasei.)

Servicii:
  YOURMODULE_YOURCLASS:
    clasa: „\Drupal\YOURMODULE\Listener\YOURCLASS”
    Etichete:
      - { nume: 'event_subscriber' }
    argumente:
      - „@path.current”
      - „@jwt.authentication.jwt”

Contrar a ceea ce spune comentariul, fișierul care conține \Drupal\MODULUL DVS.\Listener\CLASA DVS clasa nu este src/Listener/yourfile.php dosar, dar src/Listener/YOURCLASS.php fișier conținut în directorul modulului.

Ca note laterale:

  • După cum este descris în Evenimente, fișierul care conține o clasă de abonat la eveniment nu este necesar să se afle într-un anumit director. Modulele de bază Drupal pun în mod normal acele fișiere în fișierul EventSubscriber director.

  • The JSON Web Token Authentication (JWT) modulul nu definește niciunul get_jwt_key() nici jwt_token_params(). Comentariul nu arată codul pentru acele funcții, dar ele trebuie implementate din modul. (În acest caz, numele lor ar trebui să fie prefixate de numele mașinii modulului.) -The CLASA TA clasa afișată în acel comentariu se inițializează $this->jwtAuth în constructorul său, dar onHttpLoginResponse() nici nu o foloseste.

    /**
     * Adăugați un token de acces JWT la răspunsul API de conectare a utilizatorului
     */
    funcția publică onHttpLoginResponse(FilterResponseEvent $event) {
      // Opriți dacă nu cererea de conectare a utilizatorului
      if ($this->currentPath->getPath() !== '/user/login') {
        întoarcere;
      }
      // Obține răspuns
      $răspuns = $eveniment->getResponse();
      // Asigurați-vă că răspunsul nu este de eroare
      dacă ($răspuns->getStatusCode() !== 200) {
        întoarcere;
      }
      // Obține cerere
      $cerere = $eveniment->getRequest();
      // Ocupați doar formatul JSON pentru moment
      if ($request->query->get('_format') !== 'json') {
        întoarcere;
      }
      // Decodifică și adaugă token JWT
      if ($conținut = $răspuns->getContent()) {
        if ($decodificat = Json::decode($conținut)) {
          $uid = $decoded['current_user']['uid'];
          // Adăugați tokenul de acces JWT
          $key = get_jwt_key(); //cheie pentru generarea jetonului jwt
          $token = jwt_token_params($uid); // parametrii care urmează să fie adăugați în token.
          $access_token = JWT::encode($token, $cheie);
          $decoded['jwt_access_token'] = $access_token;
          // Setați un răspuns nou JSON
          $response->setContent(Json::encode($decoded));
          $event->setResponse($response);
        }
      }
    } 
    

    În mod clar, codul afișat în acel comentariu este incomplet.

drapel ni
Multumesc pentru ajutor. După ce am citit și un test am făcut-o cu asta: $jwt = \Drupal::service('jwt.authentication.jwt'); $access_token = $jwt->generateToken();

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.