Score:1

GraphQL query to validate User Login

ธง 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
bd flag
เหตุใดแบบสอบถามจึงส่งคืนรหัสผ่าน ฟังดูเป็นความคิดที่ไม่ดี การเข้าสู่ระบบควรได้รับการจัดการจากฝั่งเซิร์ฟเวอร์ อาจช่วยได้เล็กน้อย: https://gist.github.com/sebas5384/ab0da24e6091f96a6cced2cb6fb0e069 (นำมาจาก [การสนทนานี้](https://github.com/drupal-graphql/graphql/issues/357) ใน drupal-graphql ออกคิว.
us flag
ใช่ คุณจะต้องใช้การกลายพันธุ์ของ GraphQL เพื่อเข้าสู่ระบบ มิเช่นนั้นอาจโพสต์ไปที่ `/user/login?_format=json` คุกกี้เซสชันที่เป็นผลลัพธ์สามารถใช้เพื่อตรวจสอบสิทธิ์คำขอที่ตามมาได้ คุณยังสามารถค้นหา `currentUserContext` หลังจากนั้นด้วยคุกกี้รับรองความถูกต้องเพื่อดูรายละเอียดผู้ใช้
cn flag
@berliner ขอบคุณสำหรับคำแนะนำ ข้อความค้นหาข้างต้นเป็นเพียงการทดสอบว่าใช้งานได้หรือไม่กับพารามิเตอร์ที่ให้มา แต่จะคืนค่า 'pass' 'null' ฉันได้ดูลิงก์ที่คุณให้มาด้วย มันแสดงข้อผิดพลาดเมื่อฉันนำไปใช้
cn flag
@DavidThomas: ขอบคุณสำหรับคำแนะนำ ตามเอกสาร GraphQL การกลายพันธุ์จะใช้สำหรับการดำเนินการ CRUD คุณช่วยอธิบายเพิ่มเติมได้ไหม
cn flag
ในที่สุดฉันก็เข้าใจแล้วว่า การตรวจสอบการเข้าสู่ระบบโดยใช้ JWT:https://www.drupal.org/project/jwt ซึ่งเป็นโมดูลที่สนับสนุนโดย Drupal นอกจากนี้ ต้องติดตั้งโมดูลอื่น 'รับ JWT เมื่อเข้าสู่ระบบ' (https://www.drupal.org/project/getjwtonlogin) ซึ่งให้โทเค็น JWT แก่ผู้ใช้ปลายทาง
Score:2
ธง cn

Drupal บันทึกรหัสผ่านที่แฮชไว้ในฐานข้อมูลและเป็นการเข้ารหัสแบบทางเดียว ซึ่งหมายความว่าคุณไม่สามารถรับรหัสผ่านดั้งเดิมจากรหัสผ่านได้ ในระหว่างกระบวนการตรวจสอบสิทธิ์ Drupal จะเข้ารหัสรหัสผ่านที่ป้อนโดยผู้ใช้ และตรวจสอบว่ารหัสผ่านที่เข้ารหัสเท่ากับรหัสผ่านในฐานข้อมูลหรือไม่ และเมื่อพบ เงื่อนไขนี้ในโครงการขนาดใหญ่ (ไม่แยกส่วน) จะสร้างคุกกี้ที่มีข้อมูลเกี่ยวกับผู้ใช้และส่งกลับไปยังเบราว์เซอร์ซึ่งจะถูกจัดเก็บและใช้งานในอนาคต

แต่เมื่อพัฒนาวิธีการแบบแยกส่วน เช่น การใช้ GraphQL หรือ JsonAPI หรือ Rest API คุณจะไม่สามารถใช้คุกกี้ได้เสมอไป เนื่องจากแอปพลิเคชันส่วนหน้าอาจไม่รองรับ (เช่น แอปบนอุปกรณ์เคลื่อนที่ Android หรือ ...) ดังนั้นในกรณีนี้ ควรใช้โทเค็นสำหรับ การพิสูจน์ตัวตน มีบางโมดูลที่ได้รับความนิยมมากที่สุด OAuth อย่างง่าย (OAuth2) และการเชื่อมต่อ OpenID (เสถียรและใช้กันอย่างแพร่หลาย)

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

{SiteName}/oauth/โทเค็น

และในร่างกายที่ควรจะเป็นประเภท หลายส่วน / แบบฟอร์มข้อมูล (ไม่รองรับแอปพลิเคชัน/json) คุณสามารถมี:

Grant_type = รหัสผ่าน
client_id = รหัสผู้บริโภคที่คุณสามารถสร้างผ่าน UI
client_secret = รหัสผ่านของผู้บริโภค (หากคุณตั้งค่าไว้)
ชื่อผู้ใช้ = USERNAME
รหัสผ่าน = รหัสผ่าน
ขอบเขต = บทบาทที่คุณต้องการให้ผู้ใช้มีซึ่งผู้บริโภคไม่ได้กำหนด (จะไม่ส่งผลกระทบหากผู้ใช้ไม่มีบทบาทนั้น ดังนั้นจึงไม่ต้องกังวลเรื่องความปลอดภัย)

เพียงเท่านี้ คุณจะได้รับโทเค็นการเข้าถึงและรีเฟรชเมื่อมีการตอบกลับ ซึ่งสามารถใช้ในคำขอเรียก GraphQL หรือบริการ REST อื่นๆ ในอนาคตได้

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

โพสต์คำตอบ

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