Skip to content

Sequence login

Login and Session Flow

sequenceDiagram
  autonumber
  participant App as App Code
  participant Drupal as Drupal(Core)
  participant XHR as XhrInterface (Fetch/Axios)
  participant Auth as DrupalAuth
  participant Storage as Session Storage
  participant Server as Drupal Backend

  App->>Drupal: new Drupal({ baseURL, headers, auth? })
  Note right of Drupal: initialize() → setClientService(FetchClient)

  App->>Drupal: drupal.setSessionService(StorageInWeb)

  App->>Auth: new DrupalAuth(drupal)
  Auth->>Drupal: getClientService(), getSessionService()
  Auth->>XHR: GET /session/token (withCredentials)
  XHR->>Server: GET /session/token
  Server-->>XHR: 200 OK, token
  XHR-->>Auth: XhrResponse(data=csrf_token)
  Auth->>Storage: setItem(DRUPAL_AUTH.SESSION, {..., csrf_token})
  Auth->>XHR: addDefaultHeaders({ 'X-CSRF-Token': token })

  App->>Auth: login(name, pass)
  Auth->>XHR: POST /user/login {_format=json, data}
  XHR->>Server: POST /user/login
  alt Success
    Server-->>XHR: 200 OK, { csrf_token, logout_token, current_user }
    XHR-->>Auth: XhrResponse(data)
    Auth->>Storage: setItem(DRUPAL_AUTH.SESSION, data)
    Auth->>XHR: addDefaultHeaders({ 'X-CSRF-Token': data.csrf_token })
  else Error
    Server-->>XHR: 4xx/5xx, body/text
    XHR-->>App: throw DrupalError from Client.getDrupalError()
  end

  App->>Drupal: drupal.getClientService().call('GET', '/jsonapi/node/article/<id>')
  XHR->>Server: GET /jsonapi/node/article/<id>
  Server-->>XHR: 200 OK, JSON:API document
  XHR-->>App: XhrResponse(data)