開発したアプリなど一覧

WordPress の REST API で投稿時に 401 エラーが出る問題への対処

記事内にアフィリエイトリンクを含む場合があります

WordPress の REST API を用いて投稿を行おうとしたときに、401 エラーが出ていた。エラー本文は以下のような感じ。

{"code":"rest_cannot_create","message":"このユーザーとして投稿を編集する権限がありません。","data":{"status":401}}

原因が複数あり時間がかかったが、どうにか解決したのでメモ代わりに残しておこうと思う。

PHP を CGI で動かすと Authorization ヘッダーが使えない場合がある

Google 検索とサーバーの情報を確認したところ、どうやら PHP を CGI で動かすと Authorization ヘッダーが消えてしまう場合があるらしい。

Authorization ヘッダーを環境変数で扱うために CGIPassAuth を有効にする #PHP - Qiita

Basic Authorization Header Missing · WordPress/application-passwords Wiki · GitHub

自分が利用しているレンタルサーバーでは PHP が CGI で動作していたので、上記 Web ページにあるように .htacess を編集した。

# BEGIN WordPress RewriteEngine On # 以下の行を追記 RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]

# END WordPress

これで問題なく動く・・・と思いきやまた同様のエラーメッセージが出る。

HTTP で REST API にアクセスすると 401 エラーが出る場合がある

.htaccess を編集してもまだ 401 エラーが出続けた。

改めてスクリプト編集して確認すると、 REST API へ HTTP でアクセスすると 401 エラーが返ってくるようだった。REST API のエンドポイントを http から https へ変更すると問題なく投稿できた。

開発環境ではならなかったので、本番環境で利用しているセキュリティプラグイン(レンタルサーバーの WP 簡単インストール的な機能を利用すると勝手に入ってくる)が http でのアクセスを拒否しているのではないか、と考えていたがソースコードを確認してもそれらしき文言は確認できず。

とりあえず原因は不明だが https に変更したら 401 エラーは消え正常に動作した。

Sponsored Link

コメント

タイトルとURLをコピーしました