web-dev-qa-db-ja.com

RESTで設定されたCookieが保持されている場合、Drupalでログインできません(403禁止)

Ajaxリクエストでログインしようとしています。豪華なREST機能は必要ありません。ログインしたいだけです。ドキュメントおよび その他の質問はこちら によると、かなり簡単なはずです。 Drupal 8.3.7の場合:

 $.ajax({
    method: "POST",
    url: "/user/login?_format=json",
    dataType: "json",
    contentType: "application/json",
    data: { user: "myname", pass: "mypass" }
})

ただし、私は常に403 forbidden応答を受け取るため、これは私にはまったく機能しません。面白いことに、私はそれをPostman(RESTリクエストを送信するためのサードパーティツール)で動作させることができますが、特定の条件下でのみです。 Postmanでは、リクエストでドメインのCookieを送信しない限り、デフォルトの設定のままにし、Cookieを送信させると、「403 forbidden」の問題が再び発生します。次に、手動でcookieを手動で削除し、次の試行のためにすべて正常に戻します(それにより、新しいcookieが設定され、次の試行は失敗します)。

私のリクエストのブラウザー内jQueryバージョンで同じ問題が発生していると思いますが、Cookieを取り除くことができないため、Cookieを機能させることができません。私は関連する質問(csrfトークン、jdrupal、基本認証など)で提供されるすべての回答を試しましたが、ブラウザーによってCookieデータが自動的に添付されるように要求した場合、それは常に同じ問題です。

何がうまくいっていないのですか? Drupal Cookieデータを嫌うのはなぜですか(これはDrupal自体によって設定されました!))。認証されたユーザーはもうログインURLを使用できませんか?/user/loginページは認証されたユーザーの/ userにリダイレクトするため、すでに認証されている場合は、代わりにリクエストが/ userに送信されますか?

1
peanutman

認証されたユーザーはログインURLを使用できなくなりますか?

いいえ、できません。それができるようにしても意味がありません(すでにログインしている場合は、ログインできません)。

実際には、これはログインエンドポイントのルーティングエントリです。

user.login:
  path: '/user/login'
  defaults:
    _form: '\Drupal\user\Form\UserLoginForm'
    _title: 'Log in'
  requirements:
    _user_is_logged_in: 'FALSE'
  options:
    _maintenance_access: TRUE

要件からわかるように、ユーザーはリソースにアクセスするためにまだログインできていません。

2
Clive