2012-04-07 15 views
3

私はKohanaを使用してAPIを書いています。各外部要求は、クライアントが署名して受け入れられる必要があります。Kohanaリクエストが内部リクエストかどうかを知る方法?

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

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

答えて

1

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

Kohana 3.2 API, Request - is_initial()

0

たぶん、あなたはis_external方法を探しています:
http://kohanaframework.org/3.2/guide/api/Request#is_external

+0

私は、このプロパティを見ましたが、これは異なっています。これは、ドメイン外からの要求があるかどうかをチェックするためです。つまり、http://example.comがhttp://mydomain.com/someactionを呼び出すと、 'is_external'がtrueになります。しかし、ブラウザのバーにhttp://mydomain.com/someactionと入力すれば、 'is_external'はfalseになります。だからリクエストはまだ外部から来ているので(サーバー内から直接ではないので)、私はそれを使うことはできません。 –

1

簡単にあなたのアプリがチェックすることができ、静的変数のいくつかの並べ替えを設定することで、この問題を解決できるようですね。それが偽でないなら、あなたはそれが内部であることを知っています。

1

これが私のやり方です。Requestオブジェクトをオーバーライドし、is_server_sideプロパティを追加しました。

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

そして、ここで:要求を受信し、コントローラに後でその後

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

:私は要求を作成するとき、それは、サーバー側に作成されています、私が知っているように、今、私はちょうどこれをtrueに設定しますアプリケーション/クラスでオーバーライド要求クラスがある/ 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; 
    } 

} 
1

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

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

+0

ソースコードへのポインタありがとう。これは内部リクエストのように見え、 'client'プロパティは' new Request_Client_Internal'に設定され、外部リクエストに対しては 'new Request_Client_External'に設定されます。信頼できるかどうかを確認するためにいくつかのテストを行います。 –

関連する問題