Điểm:0

Làm cách nào để nhận mã thông báo jwt của người dùng hiện tại?

lá cờ ni

Trong một mô-đun tùy chỉnh, tôi cần lấy mã thông báo jwt (access_token) liên quan đến người dùng hiện tại. Theo dõi điều này số báo Tôi đã cố lấy nhưng không thành công, vì get_jwt_key() và jwt_token_params() không được xác định và tôi không thể tìm thấy chúng được xác định ở đâu:

sử dụng \Firebase\JWT\JWT;
...    
hàm công khai getAccessToken() {
  $uid = \Drupal::currentUser()->id();
  // Thêm mã thông báo truy cập JWT
  $key = get_jwt_key(); //key để tạo jwt token
  $token = jwt_token_params($uid); // tham số được thêm vào token.
  $access_token = JWT::encode($token, $key);
  trả về $access_token;
}

Tôi đã thử chỉ với:

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

Nhưng tôi chưa tìm thấy cách khởi tạo dịch vụ $jwtAuth để tạo mã thông báo. Bất cứ đề nghị nào?

Điểm:2
lá cờ us

Mã hiển thị trên bình luận #2 Trong Nhận người mang mã thông báo với mô-đun JWT sau khi đăng nhập phương thức nghỉ ngơi là mã cho một lớp người đăng ký sự kiện. Điều mà nhận xét đó không hiển thị là định nghĩa của dịch vụ người đăng ký sự kiện.

Như được mô tả trong Đăng ký và gửi sự kiện / Drupal 8 Sự kiện, tệp .services.yml phải chứa các dòng tương tự như các dòng sau. (Thay thế MODULE CỦA BẠN với tên máy mô-đun và LỚP CỦA BẠN với tên lớp.)

dịch vụ:
  YOURMODULE_YOURCLASS:
    lớp: '\Drupal\YOURMODULE\Listener\YOURCLASS'
    thẻ:
      - { tên: 'event_subscriber' }
    tranh luận:
      - '@path.current'
      - '@jwt.authentication.jwt'

Trái ngược với những gì nhận xét nói, tệp chứa \Drupal\YOURMODULE\Listener\YOURCLASS lớp học không phải là src/Listener/yourfile.php tập tin, nhưng src/Listener/YOURCLASS.php tập tin chứa trong thư mục mô-đun.

Như ghi chú bên lề:

  • Như được mô tả trong Sự kiện, tệp chứa lớp người đăng ký sự kiện không bắt buộc phải nằm trong một thư mục cụ thể. Các mô-đun lõi Drupal thường đặt các tệp đó trong Người đăng ký sự kiện danh mục.

  • Các Xác thực mã thông báo web JSON (JWT) mô-đun không xác định cũng không get_jwt_key() cũng không jwt_token_params(). Nhận xét không hiển thị mã cho các chức năng đó, nhưng chúng cần được triển khai từ mô-đun. (Trong trường hợp đó, tên của chúng phải có tiền tố là tên máy của mô-đun.) -Các LỚP CỦA BẠN lớp hiển thị trong nhận xét đó khởi tạo $this->jwtAuth trong hàm tạo của nó, nhưng onHttpLoginResponse() thậm chí không sử dụng nó.

    /**
     * Thêm mã thông báo truy cập JWT vào phản hồi API đăng nhập của người dùng
     */
    chức năng công khai onHttpLoginResponse(FilterResponseEvent $event) {
      // Dừng nếu không có yêu cầu đăng nhập của người dùng
      if ($this->currentPath->getPath() !== '/user/login') {
        trở lại;
      }
      // Nhận được phản ứng
      $response = $event->getResponse();
      // Đảm bảo không phản hồi lỗi
      if ($response->getStatusCode() !== 200) {
        trở lại;
      }
      // Nhận yêu cầu
      $request = $event->getRequest();
      // Chỉ xử lý định dạng JSON ngay bây giờ
      if ($request->query->get('_format') !== 'json') {
        trở lại;
      }
      // Giải mã và thêm mã thông báo JWT
      if ($content = $response->getContent()) {
        if ($decoded = Json::decode($content)) {
          $uid = $decoded['current_user']['uid'];
          // Thêm mã thông báo truy cập JWT
          $key = get_jwt_key(); //key để tạo jwt token
          $token = jwt_token_params($uid); // tham số được thêm vào token.
          $access_token = JWT::encode($token, $key);
          $decoded['jwt_access_token'] = $access_token;
          // Đặt JSON phản hồi mới
          $response->setContent(Json::encode($decoded));
          $event->setResponse($response);
        }
      }
    } 
    

    Rõ ràng, mã được hiển thị trong nhận xét đó là không đầy đủ.

lá cờ ni
Cảm ơn bạn đã giúp đỡ. Sau khi đọc và thực hiện một số thử nghiệm, tôi đã làm như sau: $jwt = \Drupal::service('jwt.authentication.jwt'); $access_token = $jwt->generateToken();

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.