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に送信されますか?
認証されたユーザーはログイン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
要件からわかるように、ユーザーはリソースにアクセスするためにまだログインできていません。