Điểm:1

GraphQL query to validate User Login

lá cờ cn

I'm working on the Drupal decoupled project, where the client is VueJs and the backend is Drupal 9. I'm using Drupal's contrib module GraphQL 8.x-3.1 for the interaction between client and server. I'm new to GraphQL.

I created a GraphQL query to validate the user during login. Below is the query,

query{
  userQuery(filter: {
    conjunction: AND, 
    groups: [{conditions: [
      {operator: EQUAL, field: "name", value: "editor.user"},
      {operator: EQUAL, field: "status", value: "1"},
    ]}]}) {
    count
    entities {
        ... on User {
        uid
        name
        pass {
          value
          existing
          preHashed
        }
        mail
      }
    }
  }
}

The query is displaying the pass field as null.

{
  "data": {
    "userQuery": {
      "count": 1,
      "entities": [
        {
          "uid": 15,
          "name": "editor.user",
          "pass": null,
          "mail": "[email protected]"
        }
      ]
    }
  }
}

Am I doing any mistake to query?

Also, is it the right way to validate the user?

Appreciate your suggestion.

berliner avatar
lá cờ bd
Tại sao truy vấn sẽ trả về mật khẩu? Nghe có vẻ như là một ý tưởng tồi. Việc đăng nhập nên được xử lý phía máy chủ. Có lẽ điều này sẽ giúp một chút: https://gist.github.com/sebas5384/ab0da24e6091f96a6cced2cb6fb0e069 (Lấy từ [cuộc thảo luận này](https://github.com/drupal-graphql/graphql/issues/357) trong drupal-graphql phát hành hàng đợi.
lá cờ us
Có, bạn sẽ cần sử dụng đột biến GraphQL để đăng nhập, nếu không thì có thể đăng lên `/user/login?_format=json` Cookie phiên kết quả có thể được sử dụng để xác thực các yêu cầu tiếp theo. Bạn cũng có thể truy vấn `currentUserContext` sau đó, bằng cookie xác thực, để nhận thông tin chi tiết về người dùng.
lá cờ cn
@berliner Cảm ơn bạn đã gợi ý. Truy vấn trên chỉ để kiểm tra xem nó có hoạt động hay không với tham số được cung cấp. Nhưng nó trả về giá trị 'vượt qua' 'null' . Tôi cũng đã xem liên kết bạn cung cấp, nó báo lỗi khi tôi triển khai.
lá cờ cn
@DavidThomas: Cảm ơn bạn đã gợi ý. Theo tài liệu GraphQL, đột biến được sử dụng cho thao tác CRUD. Bạn có thể vui lòng giải thích thêm?
lá cờ cn
Cuối cùng tôi cũng nhận ra rằng việc xác thực đăng nhập bằng cách sử dụng có thể được triển khai bằng cách sử dụng JWT:https://www.drupal.org/project/jwt, một mô-đun do Drupal đóng góp. Ngoài ra, phải cài đặt một mô-đun khác, 'Nhận JWT khi đăng nhập' (https://www.drupal.org/project/getjwtonlogin) đã cung cấp mã thông báo JWT cho người dùng cuối.
Điểm:2
lá cờ cn

Drupal lưu mật khẩu đã băm trong cơ sở dữ liệu và đó là mã hóa một chiều, có nghĩa là bạn không thể lấy mật khẩu gốc từ nó, trong quá trình xác thực, drupal mã hóa mật khẩu đầu vào của người dùng và kiểm tra xem mật khẩu được mã hóa có bằng mật khẩu trong cơ sở dữ liệu hay không và khi đáp ứng điều kiện này, trong một dự án nguyên khối (không tách rời), nó tạo một cookie có thông tin về người dùng và gửi lại cho trình duyệt, cookie này sẽ được lưu trữ và sử dụng cho các lần sử dụng sau.

Nhưng khi phát triển một cách tiếp cận tách rời như sử dụng GraphQL hoặc JsonAPI hoặc Rest API, bạn không thể luôn sử dụng cookie vì ứng dụng giao diện người dùng có thể không hỗ trợ nó (như ứng dụng di động Android hoặc ...), vì vậy trong trường hợp này, tốt hơn là sử dụng Mã thông báo cho xác thực, có một số mô-đun mà một trong những mô-đun phổ biến nhất là Kết nối OAuth (OAuth2) & OpenID đơn giản (ỔN ĐỊNH VÀ ĐƯỢC SỬ DỤNG RỘNG RÃI)

sau khi thiết lập mô-đun này (cài đặt bằng trình soạn thảo, tạo khóa riêng và khóa chung và giới thiệu người tiêu dùng), bạn có thể chỉ cần nhận mã thông báo bằng cách thực hiện yêu cầu Đăng tới:

{SiteName}/oauth/token

và trong cơ thể nên thuộc loại nhiều phần/biểu mẫu dữ liệu (application/json không được hỗ trợ) bạn có thể có:

Grant_type = mật khẩu
client_id = ID NGƯỜI TIÊU DÙNG BẠN CÓ THỂ XÂY DỰNG THÔNG QUA UI
client_secret = MẬT KHẨU NGƯỜI TIÊU DÙNG (NẾU BẠN ĐÃ ĐẶT)
tên người dùng = TÊN NGƯỜI DÙNG
mật khẩu = MẬT KHẨU
phạm vi = VAI TRÒ BẠN MUỐN NGƯỜI DÙNG CÓ MÀ KHÔNG PHỤ THUỘC VÀO NGƯỜI TIÊU DÙNG (SẼ KHÔNG ẢNH HƯỞNG NẾU NGƯỜI DÙNG KHÔNG CÓ VAI TRÒ ĐÓ, VÌ VẬY KHÔNG CẦN QUAN TÂM VỀ BẢO MẬT)

và thế là xong, bạn sẽ nhận được mã thông báo truy cập và làm mới khi phản hồi. mà sau đó có thể được sử dụng trong các yêu cầu trong tương lai gọi GraphQL hoặc bất kỳ dịch vụ REST nào khác.

Một thông báo quan trọng về mô-đun này là về việc sử dụng Phạm vi, đó là khi giới thiệu một ứng dụng khách, bạn có thể chỉ định một hoặc nhiều phạm vi cho ứng dụng khách đó và khi người dùng đăng nhập thông qua ứng dụng khách đó sẽ có tất cả các vai trò được gán cho ứng dụng khách đó

Đă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.