REST APIを介したログインについての理解


7

この記事を読んでいました。Drupal 8でREST APIを使用してログインする方法を教えてください。デフォルトでは、ユーザーがログインすると、Drupalはユーザー名とパスワードを検証します。ログイン後、ブラウザには作成されたセッションのCookieがあります。

ここに画像の説明を入力してください

REST APIを使用して、Drupal 8がユーザーが初めてログインするときにユーザーをどのように確認できますか?ログイン後、現在のログインをどのように確認しますか?


1
実際に同じ方法で、CSRFトークンにログイン/リクエストすると、トークンが提供され、Cookie /ヘッダーと、それらの値を含む後続のリクエストを送信します
Clive

ご協力ありがとう御座います。私は初心者なので、詳細を知るのに役立ちます。CSRFトークンを取得するには、CSRFトークンをサーバーに投稿します。
ジョン

ジョン、以下の私の回答の詳細または説明が必要ですか?必要に応じて改善させていただきます。
不潔

質問のタイトルが「REST API」を削除するために変更されたのはなぜですか?問題は特にREST APIに関するものです。
不潔

@imclean質問のタイトルにすべての詳細を含める必要はありませんが、実際には不可能です。そうすれば、タイトルでタグを報告する必要もなくなります。
kiamlaluno

回答:


12

ユーザー資格情報をPOSTしてDrupalにログインします。必ず「Content-Type」ヘッダーを設定してください。これにより、ユーザーのセッションが開始されます。

POST URL:

/user/login?_format=json

ヘッダ:

Content-Type: application/json

POSTデータ:

{
  "name": "username",
  "pass": "password"
}

成功した応答:

{
  "current_user":{
    "uid": "1",
    "roles":[
      "authenticated",
      "administrator"
    ],
    "name": "username"
  },
  "csrf_token":   "asda09820380_2238019280dk09n908asjdlkajdaoa",
  "logout_token": "asdasd09a8sdaslkdasl-asdasdklsajdlkasdjlksj"
}

ヘッダーを設定して、後続のGET、POST、PATCH、DELETEなどのリクエストでCSRFトークンを使用します。

X-CSRF-Token: asda09820380_2238019280dk09n908asjdlkajdaoa

ログアウトするには、POSTリクエストでログアウトトークンを使用します。これにより、ユーザーのセッションが終了します。

/user/logout?_format=json&token=asdasd09a8sdaslkdasl-asdasdklsajdlkasdjlksj

ログインステータスを取得:

/user/login_status?_format=json

GETトークン:

/rest/session/token

参照:


それは良いことです。しかし、初心者には難しいです。郵便配達員でのログインに関する詳細を教えてください。テーブルセッションに保存されたセッションにログインがあります。そして、ログインを終了しました。再度ログインすることはできず、応答を返すことができます。
ジョン2017年

郵便配達は別の質問になる可能性があります。ただし、一見するとリクエストとレスポンスの履歴は自動的に保存されないため、毎回[保存]をクリックする必要があります。Restlet Clientを使用しています。Postmanで、「Content-Type」ヘッダーのみを追加し、ボディタイプには「raw」をクリックすることを確認します。トークンを再び使用できるように、各応答を「保存」する必要があります。Drupalセッションは通常と同じ方法で管理されます。セッションのトークンを手動で管理する必要があるクライアント側。
不潔な

アプリで設定しない限り、RESTではCookieは設定されません。代わりにトークンを使用してください。
不潔

@Jonh PostmanはREST応答の保存をサポートしていないようですので、Restletクライアントの使用をお勧めします。参照:履歴およびコレクション内に応答を保存する
不潔

1
問題が見つかりました。テーブルセッション:Drupalのセッションハンドラーは、セッションテーブルの読み取りと書き込みを行います。各レコードは、匿名または認証済みのユーザーセッションを表します。コントローラー / rest / session / tokenは常に値を返します(匿名または認証されたユーザー)。したがって、トークンを取得する場合、最初にユーザーでログインする必要があります。/ user / login_status?_format = jsonの戻り値が1の場合。トークンにアクセスするために再度ログインすることはできません。ログアウトが必要です。ログアウトできない場合。テーブルセッションを空にすることができます。
ジョン

1

Drupal Coreバージョン:8.x-4.x

最初にユーザーログインサービスを有効にする必要があります。これは非常に多くの方法で実行できますが、REST UIモジュールを使用することを好みます。

ゴーへ/管理/設定/サービス/休息と有効ユーザー RESTリソースを。

有効にすると、ユーザーリソースの横にある[ 編集 ]をクリックして、/ admin / config / services / rest / resource / entity%3Auser / editに移動できます。必ずGETメソッドを有効にしてください。

ここに画像の説明を入力してください

これですべての設定が完了しました。ターミナルでこのコマンドを実行するか、PostmanクライアントやRestletクライアントなどのcurlリクエスト用のアプリケーションを使用して、サービスの使用を開始できます。

:CSRFトークンは、/ rest / session / tokenから取得できます。

curl -i -L -X POST \
  -H "Content-Type:application/json" \
  -H "Accept:application/json" \
  -H "X-CSRF-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  -d \
     '{
       "name": "my_username",
       "pass": "my_password"
     }' \
'http://SITE-URL/user/login?_format=json'

返されるオブジェクトは次のとおりです。

成功

{
  "current_user": {
  "uid": "1",
    "roles": [
      "authenticated"
    ],
    "name": "Admin"
  },
  "csrf_token": "bbbbbbbbbbbbbbbbbbbbbbbbbb",
  "logout_token": "ccccccccccccccccccccccccc"
}

失敗

{
  "message":"Sorry, unrecognized username or password."
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.