Score:0

จะรับโทเค็น jwt ของผู้ใช้ปัจจุบันได้อย่างไร

ธง ni

ในโมดูลที่กำหนดเอง ฉันต้องได้รับโทเค็น jwt (access_token) ที่เกี่ยวข้องกับผู้ใช้ปัจจุบัน ตามนี้ ปัญหา ฉันพยายามรับแล้ว แต่ไม่สำเร็จเนื่องจากไม่ได้กำหนด get_jwt_key() และ jwt_token_params() และไม่พบตำแหน่งที่กำหนดไว้:

ใช้ \Firebase\JWT\JWT;
...    
ฟังก์ชั่นสาธารณะ getAccessToken () {
  $uid = \Drupal::currentUser()->id();
  // เพิ่ม JWT access_token
  $key = get_jwt_key(); // คีย์สำหรับสร้างโทเค็น jwt
  $token = jwt_token_params($uid); // พารามิเตอร์ที่จะเพิ่มในโทเค็น
  $access_token = JWT::encode($โทเค็น, $key);
  ส่งคืน $ access_token;
}

ฉันได้ลองกับ:

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

แต่ฉันไม่พบวิธีเริ่มต้นบริการ $jwtAuth เพื่อสร้างโทเค็น ข้อเสนอแนะใด ๆ

Score:2
ธง us

รหัสที่แสดงในความคิดเห็น #2 ใน รับผู้ถือโทเค็นด้วยโมดูล JWT หลังจากเข้าสู่ระบบส่วนที่เหลือ เป็นรหัสสำหรับคลาสสมาชิกเหตุการณ์ สิ่งที่ความคิดเห็นนั้นไม่แสดงคือคำจำกัดความของบริการสมาชิกเหตุการณ์

ตามที่อธิบายไว้ใน สมัครสมาชิกและจัดส่งกิจกรรม / กิจกรรม Drupal 8ไฟล์ .services.yml ควรมีบรรทัดที่คล้ายกับบรรทัดต่อไปนี้ (แทนที่ โมดูลของคุณ ด้วยชื่อเครื่องโมดูลและ ชั้นเรียนของคุณ ด้วยชื่อชั้น)

บริการ:
  YOURMODULE_YOURCLASS:
    คลาส: '\Drupal\YOURMODULE\Listener\YOURCLASS'
    แท็ก:
      - { ชื่อ: 'event_subscriber' }
    ข้อโต้แย้ง:
      - '@path.current'
      - '@jwt.authentication.jwt'

ตรงกันข้ามกับที่ความคิดเห็นระบุไว้ ไฟล์ที่มีไฟล์ \Drupal\YOURMODULE\Listener\YOURCLASS ชั้นไม่ได้เป็น src/Listener/yourfile.php ไฟล์ แต่ไฟล์ src/Listener/YOURCLASS.php ไฟล์ที่อยู่ในไดเร็กทอรีโมดูล

เป็นบันทึกด้านข้าง:

  • ตามที่อธิบายไว้ใน เหตุการณ์ไฟล์ที่มีคลาสสมาชิกเหตุการณ์ไม่จำเป็นต้องอยู่ในไดเร็กทอรีเฉพาะ โดยปกติแล้วโมดูลหลักของ Drupal จะใส่ไฟล์เหล่านั้นไว้ในไฟล์ ผู้สมัครสมาชิกกิจกรรม ไดเรกทอรี

  • เดอะ การรับรองความถูกต้องโทเค็นเว็บ JSON (JWT) โมดูลไม่ได้กำหนดเช่นกัน get_jwt_key() ก็ไม่เช่นกัน jwt_token_params(). ความคิดเห็นไม่แสดงรหัสสำหรับฟังก์ชันเหล่านั้น แต่จำเป็นต้องดำเนินการจากโมดูล (ในกรณีนั้น ควรนำหน้าชื่อด้วยชื่อเครื่องโมดูล) -เดอะ ชั้นเรียนของคุณ คลาสที่แสดงในความคิดเห็นนั้นเริ่มต้น $this->jwtAuth ในตัวสร้างของมัน แต่ onHttpเข้าสู่ระบบตอบกลับ() ไม่ได้ใช้มันด้วยซ้ำ

    /**
     * เพิ่มโทเค็นการเข้าถึง JWT เพื่อตอบสนองต่อ API การเข้าสู่ระบบของผู้ใช้
     */
    ฟังก์ชั่นสาธารณะ onHttpLoginResponse (FilterResponseEvent $event) {
      // หยุดถ้าไม่ใช่คำขอเข้าสู่ระบบของผู้ใช้
      ถ้า ($this->currentPath->getPath() !== '/user/login') {
        กลับ;
      }
      // รับคำตอบ
      $response = $event->getResponse();
      // ตรวจสอบให้แน่ใจว่าไม่ตอบสนองข้อผิดพลาด
      ถ้า ($response->getStatusCode() !== 200) {
        กลับ;
      }
      // รับคำขอ
      $request = $event->getRequest();
      // จัดการรูปแบบ JSON ในตอนนี้
      ถ้า ($request->query->get('_format') !== 'json') {
        กลับ;
      }
      // ถอดรหัสและเพิ่มโทเค็น JWT
      ถ้า ($content = $response->getContent()) {
        ถ้า ($decoded = Json::decode($content)) {
          $uid = $ถอดรหัส['current_user']['uid'];
          // เพิ่ม JWT access_token
          $key = get_jwt_key(); // คีย์สำหรับสร้างโทเค็น jwt
          $token = jwt_token_params($uid); // พารามิเตอร์ที่จะเพิ่มในโทเค็น
          $access_token = JWT::encode($โทเค็น, $key);
          $ถอดรหัส['jwt_access_token'] = $access_token;
          // ตั้งค่าการตอบสนอง JSON ใหม่
          $response->setContent(Json::encode($decoded));
          $event->setResponse($response);
        }
      }
    } 
    

    เห็นได้ชัดว่ารหัสที่แสดงในความคิดเห็นนั้นไม่สมบูรณ์

ni flag
ขอบคุณสำหรับความช่วยเหลือของคุณ. หลังจากอ่านและทดสอบแล้ว ฉันทำสิ่งนี้: $jwt = \Drupal::service('jwt.authentication.jwt'); $access_token = $jwt->generateToken();

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา