Puncte:1

GraphQL query to validate User Login

drapel 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
drapel bd
De ce interogarea ar returna parola? Sună ca o idee proastă. Autentificarea ar trebui să fie gestionată de partea serverului. Poate că acest lucru ajută puțin: https://gist.github.com/sebas5384/ab0da24e6091f96a6cced2cb6fb0e069 (Preluat din [această discuție](https://github.com/drupal-graphql/graphql/issues/357) în drupal-graph coada de probleme.
drapel us
Da, va trebui să utilizați o mutație GraphQL pentru a vă autentifica, altfel este posibil să postați pe `/user/login?_format=json` Modulul cookie de sesiune rezultat poate fi folosit pentru a autentifica solicitările ulterioare. De asemenea, puteți interoga `currentUserContext` după aceea, cu cookie-ul de autentificare, pentru a obține detaliile utilizatorului.
drapel cn
@berliner Vă mulțumim pentru sugestie. Interogarea de mai sus a fost doar pentru a testa dacă funcționează sau nu cu parametrul furnizat. Dar returnează valoarea „pass” „null” . M-am uitat și în linkul pe care l-ați furnizat, arată o eroare când l-am implementat.
drapel cn
@DavidThomas: Mulțumesc pentru sugestie. Conform documentației GraphQL, mutația este utilizată pentru operația CRUD. Ai putea te rog să detaliezi mai multe?
drapel cn
În sfârșit, mi-am dat seama că validarea de conectare poate fi implementată folosind JWT: https://www.drupal.org/project/jwt, un modul contribuit de Drupal. De asemenea, trebuie să instalați un alt modul, „Get JWT on Login” (https://www.drupal.org/project/getjwtonlogin) care a furnizat un token JWT utilizatorului final.
Puncte:2
drapel cn

Drupal salvează parola hashed în baza de date și este o criptare unidirecțională, ceea ce înseamnă că nu puteți obține parola originală de la ea, în timpul procesului de autentificare, drupal codifică parola introdusă de către utilizator și verifică dacă trecerea codificată este egală cu cea din baza de date și când este îndeplinită această condiție, într-un proiect monolitic (nedecuplat) creează un cookie cu informații despre utilizator și îl trimite înapoi în browser care va fi stocat și utilizat pentru utilizări viitoare.

Dar atunci când dezvoltați o abordare decuplată, cum ar fi utilizarea GraphQL sau JsonAPI sau API-ul Rest, nu puteți utiliza întotdeauna cookie-uri, deoarece aplicația frontală ar putea să nu-l accepte (cum ar fi o aplicație mobilă Android sau ...), așa că în acest caz este mai bine să utilizați Token-uri pentru autentificare, există câteva module, dintre care unul dintre cele mai populare este OAuth simplu (OAuth2) și OpenID Connect (STABIL ȘI UTILIZAT pe scară largă)

după configurarea acestui modul (instalarea utilizând compozitorul, crearea cheii private și publice și introducerea consumatorilor) puteți obține pur și simplu un simbol făcând o solicitare Post la:

{SiteName}/oauth/token

iar în corp care ar trebui să fie de tip multipart/form-data (aplicația/json nu este acceptată) puteți avea:

grant_type = parola
client_id = ID-UL DE CONSUMATOR PE CARE PUTEȚI CONSTRUIRE PRIN INTERFACEȚIA DE UTILIZARE
client_secret = PAROLA CONSUMATOR (DACA AI SETAT)
username = USERNAME
parola = PAROLA
domeniul de aplicare = ROLURI PE CARE VREI LE AVEA UTILIZATORUL CARE NU ESTE DEFINIT DE CONSUMATOR (NU VA AFECTA DACĂ UTILIZATORUL NU ARE ACEL ROL, DECI NU SE PREOCUPĂ DE SECURITATE)

și asta este tot, veți primi un token de acces și de reîmprospătare la răspuns. care apoi poate fi folosit în cererile viitoare care apelează GraphQL sau orice alte servicii REST.

O notă importantă despre acest modul este despre utilizarea Scope, și anume atunci când introduceți un client, puteți aloca unul sau mai multe domenii acelui client și atunci când un utilizator se conectează prin acel client va avea toate rolurile atribuite acelui client.

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.