web-dev-qa-db-ja.com

Auth_redirect()に関する説明

ログインしていないユーザーをログインページにリダイレクトするページを保護しようとしたところ、auth_redirect() function here が見つかりました。

Docsは、「ユーザーがログインしていることを確認し、でなければログインページにリダイレクトする」と述べている。

さて、もしそうなら、なぜ私は関数を動作させるためにif(!is_user_logged_in())を追加する必要があるのでしょうか?それは必要ではないはずです、しかし私がそれを省略するならば、私は永遠にリダイレクトされ続けるでしょう。

この機能を使用する正しい方法は何ですか?

4
Mark

この関数は1.5からWordPressに入っていますが、途中でいくつかの変更を受けているので、答えはWPフォレンジックを少し必要とします。ただし、変更されていない点の1つは、「ユーザーがログインしているかどうかを確認し、そうでない場合はユーザーをログインページにリダイレクトする」という説明です。

技術的にはそれが想定されていると思います。そしてその最初の繰り返しで、それはしました。

ただし、これが正しく機能しないようにするいくつかの悪い条件付きロジックが導入されました。現在のバージョンのWP(4.1.1)では、問題(またはそのうちの1つ)は次の行にあります。

if ( $user_id = wp_validate_auth_cookie( '',  $scheme) ) {

この比較ロジックは、単一の "="のために機能しません。 $ user_idをwp_validate_auth_cookie()の戻り値と比較することが想定されています。ユーザーがログインしている場合は、ユーザーIDが返されます。

しかし、ロジックを修正するだけでは簡単ではありません。この関数を見ると、$ user_idは未定義です。私はそれがグローバル変数であるべきだと思うが、私は確かではない。

私はこの問題がいつ導入されたかを確かめるためにこの関数の歴史を振り返って、2.7にあったことを発見しました。そのため、これは長年の間関数の問題でした。この変更の前は、ロジックは単にその値をログインしたユーザーのユーザーIDと比較するのではなく、wp_validate_auth_cookie()から返された有効な(falseではない)値をテストするだけでした。

比較ロジックを修正し、グローバルな$ user_idを追加することで、関数の問題を解決することができるかもしれません。私はそれを試して、修正案としてこれを提出します。

2
butlerblog