3

コハナを使ってAPIを書いています。各外部リクエストは、受け入れられるためにクライアントによって署名される必要があります。

Requestただし、オブジェクトを作成してを呼び出すことにより、内部リクエストを実行する必要がある場合もありますexecute()。このような場合、リクエストが安全であることがわかっているため、署名は不要です。したがって、署名チェックをスキップできるように、リクエストが内部的なものであることを知る必要があります。

Requestでは、リクエストがオブジェクトを使用して手動で作成されたかどうかを確認する方法はありますか?

4

6 に答える 6

1

アプリがチェックできる静的変数を設定することで、この問題を簡単に解決できるようです。FALSEでない場合は、内部であることがわかります。

于 2012-04-08T01:30:35.323 に答える
1

これが私がそれをやった方法です:私はRequestオブジェクトをオーバーライドし、それにis_server_sideプロパティを追加しました。ここで、リクエストを作成するときに、これをtrueに設定して、サーバー側で作成されたことを確認します。

$request = Request::factory($url);
$request->is_server_side(true);
$response = $request->execute();

その後、要求を受信するコントローラーで次のようになります。

if ($this->request->is_server_side()) {
    // Skip signature check
} else {
    // Do signature check
}

そして、これがapplication / classes /request.phpのオーバーライドされたリクエストクラスです:

<?php defined('SYSPATH') or die('No direct script access.');

class Request extends Kohana_Request {

    protected $is_server_side_ = false;

    public function is_server_side($v = null) {
        if ($v === null) return $this->is_server_side_;
        $this->is_server_side_ = $v;
    }

}
于 2012-04-08T04:16:30.547 に答える
1

リクエストを見ると、新しいリクエストは内部リクエストと見なされるように見えますが、これを通知するために設定された特別なフラグはありません。Kohana_Requestの782から832を見てください...あなたを助けるものは何もありません。

それで、Kohana_Request_Internalを拡張して、それを内部として示すフラグを追加し、それが内部/他のすべてであるかどうかを確認する必要があるときにアプリでそれをプルすることをお勧めします。

于 2012-04-08T21:15:53.833 に答える
1

リクエストオブジェクトのis_initial()メソッドを使用できますか?このメソッドを使用して、リクエストがサブリクエストであるかどうかを判断できます。

Kohana 3.2 API、リクエスト-is_initial()

于 2012-04-09T16:40:50.353 に答える
0

is_externalたぶんあなたはメソッドを探しています:http:
//kohanaframework.org/3.2/guide/api/Request#is_external

于 2012-04-07T07:25:17.830 に答える
0

コントローラのコハナ3.3:

$this->request->is_initial()

http://kohanaframework.org/3.3/guide-api/Request#is_initial

于 2015-05-15T08:17:56.040 に答える