我想要一个authenitcation类,并且我的APIS版本也是如此,而不必复制我的安全代码。
我已经设置了restler并将以下内容添加到index.php;
Defaults::setProperty('useUrlBasedVersioning', true);
$r->addAuthenticationClass('MyOrg\\Security\\APIAuth');
然后我在公共文件夹之外的另一个文件夹中设置我的身份验证类。它不是单独工作但我发现由于使用了基于UrlBased的版本控制,我不得不在不同的命名空间中重复该类。
e.g。
MyOrd --->安全---> v1 ---> APIAuth.php
MyOrd --->安全---> v2 ---> APIAuth.php
我不想做上述事情,但更简单就是
MyOrd --->安全---> APIAuth.php
我使用的是Restler RC5,任何指导都会受到赞赏,或者这是Restler的错误。
还记录了restler项目https://github.com/Luracast/Restler/issues/433
的问题答案 0 :(得分:1)
只需实现iProvideMultiVersionApi
并返回auth类支持的最大版本,在您的情况下将为2.参见下面的示例
namespace MyOrg\Security;
use Luracast\Restler\iAuthenticate;
use Luracast\Restler\iProvideMultiVersionApi;
class Auth implements iAuthenticate, iProvideMultiVersionApi{
public function __isAllowed(){
return isset($_GET['api_key']) && $_GET['api_key'] =='allow';
}
public function __getWWWAuthenticateString(){
return 'Query';
}
/**
* Maximum api version supported by the api class
* @return int
*/
public static function __getMaximumSupportedVersion()
{
return 2;
}
}