Wordpress5.5以上にアップデートすると、クラシックエディタや投稿一覧ページでカテゴリーのチェックがつけられない不具合について、解消方法を記載します。 問題 チェックがつけられない 記事の作成…
WordPressのWP APIで記事を作成しようとリクエストを投げたとき、401レスポンスで「このユーザーとして投稿を編集する権限がありません。」とエラーメッセージが返却される場合の原因と対処方法です。
エラーの原因
このユーザーとして投稿を編集する権限がありません。
このエラーは複数の原因が考えられ、必ずしもメッセージ通りの意味ではありません。
WordPressの認証が失敗した
場合に返されるメッセージで、以下のケースがあります。
- ID・パスワードが間違っている
- 認証方法が有効になっていない
- 認証方法が有効になっているが、サーバーがCGIまたはFastCGIモードのPHPで構成されている
認証方法が有効になっていない
ハマりやすいのがこちらのケースです。
WordPress 4.7以降はデフォルトでREST APIが使用できるようになっています。
URLにwp-json/wp/v2/posts
を付けてアクセスすれば、何も設定しなくても記事情報をjsonで参照できます。
それならあとは管理画面に入る認証情報で入れるのかな?と思い込みがちです。
WordPressのAPIは、データの参照はデフォルトで有効になっていますが追加・更新する場合は認証設定を行う
必要があります。
認証方法
認証方法は3種類用意されています。
公式サイト
- クッキー認証
管理画面のログインに使用されている認証で、REST API が WordPress の内部から使われていて、 かつ、ユーザーがログインしている時のみ
使用可能な認証のため、プログラムからAPIを実行するケースではまず使いません。 - OAuth認証
別途OAuth pluginを事前にインストールする必要があります。
設定や認証方法が少々複雑になりますが、大抵の言語で有志がこの認証方式に対応したライブラリを作ってくれているので、そちらを使うとスムーズです。 - アプリケーションパスワードまたはベーシック認証
アプリケーションパスワードは、別途Application Passwords pluginをインストールする必要があります。
ベーシック認証は、別途Basic Auth pluginをインストールする必要があります。
これらの認証方式はOAuth認証と比べると簡単ですが、全てのリクエストにID・パスワードの認証情報を付けるため、公式からも本番環境で利用することは推奨されていません。
また、SSLを取得せずhttps通信ではなくhttp
で通信していると、暗号化されずに生のパスワードがネットワーク上を流れることになるため、絶対にNG
です。
認証方法が有効になっているが、サーバーがCGIまたはFastCGIモードのPHPで構成されている
BASIC認証やApplication Passwordsでユーザーページに以下のエラーが表示されている場合、WordPressを実行しているPHPの種類が理由で認証情報が上手く受け渡せない状態になります。
Due to a potential server misconfiguration, it seems that HTTP Basic Authorization may not work for the REST API on this site: `Authorization` headers are not being sent to WordPress by the web server. You can learn more about this problem, and a possible solution, on our GitHub Wiki.
この場合は、.htaccessにREMOTE_USERパラメータにAuthヘッダーをセットするように以下のように追記します。
# 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
再度ページを更新し、エラーが表示されなくなればOKです。
結局どれを選べばいい?
・仕事であればOAuth認証にすべき。
・個人ブログなどの趣味ならSSL取得済みのhttps通信でアプリケーションパスワードも可
・重要度に応じてOAuth認証にする
というのが基準になります。uuuuukkjgfkk
コメントを書く