web-dev-qa-db-ja.com

ログインDrupalコマンドラインでCURLを介してDrush uliを使用して

_drush uli_を使用して管理ユーザーとしてサイトにログインするコマンドラインを介してCURL要求を実行しようとしています。次に、別の宛先URLにリダイレクトされます。

リダイレクトされたURLが匿名ユーザーが利用できる非管理者パスである場合に機能しますが、管理者パスは403 Forbiddenを返します。これは、私のサイトが匿名ユーザーが管理ページにアクセスしようとするときに行うことです。

これは機能します:

curl -vk -L $(drush uli admin_username /node/1)

これによりHTTP 403 forbiddenが返されます:

curl -vk -L $(drush uli admin_username /admin/structure)

オプションのpathパラメータはログイン後にリダイレクトされますが、CURLがそこに到達したときのようです...もうログインされておらず、匿名ユーザーのように応答が表示されています。

誰もがこれを経験しますか?

2
Wesley Musgrove

https://spinspire.com/article/automating-drupal-user-login-and-maintaining-session-curl のおかげで、私の問題は -cookie- jar CURLオプション ワンタイムログインリンクを生成した後、drushが管理パスにリダイレクトされている間、セッションCookieを維持します。

これが私の最後の作業コマンドです:

curl --cookie-jar cookie.txt -vk -L $(drush uli admin_username /admin/structure)

これにより、/admin/structureからHTTP 200応答が返されます。

0
Wesley Musgrove

管理ページにアクセスすると、サイトはhttpからhttpsにリダイレクトされますか?その場合は、Drushに提供する--uriパラメータをhttpプロトコルではなくhttpsに設定して、それがより適切に機能するかどうかを確認してください。

0
greg_1_anderson

リダイレクト間でCookieを渡すのに問題があるため、curlは失敗します。 Wgetはこのタスクにより適したツールである必要があります。

wget -qO- $(drush -l http://mysite.local uli --no-browser admin admin/structure)

注:人間が読める形式で出力をテストするには、出力をhtml2textコマンドにパイプします。

curlを使用してページを取得するには、ユーザーの資格情報を使用して次のシェルスクリプトを試すことができます。

#!/usr/bin/env bash
url="https://www.example.com"
uri_php="/admin/structure"
user=admin
pass=admin
form_build_id=$(curl -s $url/user | grep -o 'form-[^" ]\{40,\}')
cookie=$(curl -sX POST -d "name=$user&pass=$pass&form_id=user_login&op=Log+in&form_build_id=$form_build_id" $url -D- | grep -o "SESS[^;]\{60,\}")
content=$(curl -s -H "Cookie: $cookie" ${url}${uri_php})
echo $content
0
kenorb