我正在使用Kohana编写API。每个外部请求必须由客户签名才能被接受。
但是,我有时也需要通过构建Request
对象并调用execute()
来执行内部请求。在这些情况下,签名是不必要的,因为我知道请求是安全的。所以我需要知道请求是内部的,以便我可以跳过签名检查。
那么有没有办法找出是否使用Request
对象手动创建了请求?
答案 0 :(得分:1)
听起来您可以通过设置应用可以检查的某种静态变量来轻松解决此问题。如果它不是FALSE,那么你知道它是内部的。
答案 1 :(得分: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;
}
}
答案 2 :(得分:1)
查看请求,看起来您的新请求将被视为内部请求,但没有设置任何特殊标志来告诉您这一点。看看Kohana_Request中的782到832 ......没什么可以帮到你的。
有了这个,我建议扩展Kohana_Request_Internal以添加一个标记,将其显示为内部标记,并在需要检查是否为内部/所有其他内容时将其拉到应用程序中。
答案 3 :(得分:1)
您可以使用请求对象的is_initial()方法吗?使用此方法,您可以确定请求是否是子请求。
答案 4 :(得分:0)
也许您正在寻找is_external
方法:
http://kohanaframework.org/3.2/guide/api/Request#is_external
答案 5 :(得分:0)
控制器中的Kohana 3.3:
$this->request->is_initial()