gpt4 book ai didi

php - 在不同的方法参数上使用身份验证 (ReSTLer 3)

转载 作者:可可西里 更新时间:2023-10-31 23:31:19 27 4
gpt4 key购买 nike

如果参数具有特定值,我想限制对方法的访问。让我们以这个类为例:

简单.php:

class Simple
{
function item($name)
{
if($name == "somerestricted")
{
// Here should be an authentication check (or somewhere else), hopefully, using an iAuthenticate class
// Later, there will be a check using a database to determine if authentication will be required
// So user/password may vary
if($authenticated)
{
// Proceed
}
else
{
// ???
}
}
else
{
echo "Hi!";
}
}
}

使用这个认证类:

基本认证.php:

class BasicAuthentication implements iAuthenticate
{
const REALM = 'Restricted API';
function __isAllowed()
{
if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
if($user == 'laterfetched' && $pass == 'fromdatabase')
{
return true;
}
}
header('WWW-Authenticate: Basic realm="'.self::REALM.'"');
throw new RestException(401, 'Basic Authentication Required');
}
}

Index.php(网关): addAuthenticationClass('BasicAuthentication'); $r->addAPIClass('简单'); $r->句柄();

simple/item 方法现在可以公开访问。但是,如果我将 item 变成一个 protected 函数,每个 请求都需要身份验证。这不是我想要做的。只有 simple/item/somerestricted 应该需要身份验证。

那么有没有办法将iAuthenticate限制为特定的参数值呢?如果没有,我该如何解决这个问题?

用户名和密码在生产使用中会有所不同(取决于给定的参数)。

我发现了这些相关问题:Restler 3.0 Basic AuthenticationLuracast Restler Authentication

我正在使用 ReSTLer rc4。

最佳答案

您已将您的 API 设为公开的混合 api,如果用户通过身份验证,将增强结果

一种方法如下所示。它使用了 ReSTLer 中的隐藏属性

class Simple
{
/**
* @var \Luracast\Restler\Restler
*/
public $restler;
/**
* @access hybrid
*/
function item($name)
{
if ($name == "somerestricted") {
if ($this->restler->_authenticated) {
// Proceed
} else {
// ???
}
} else {
echo "Hi!";
}
}
}

另一种(推荐)方法是使用 iUseAuthentication 接口(interface)

use Luracast\Restler\iUseAuthentication;

class Simple implements iUseAuthentication
{
protected $authenticated;

/**
* @access hybrid
*/
function item($name)
{
if ($name == "somerestricted") {
if ($this->authenticated) {
// Proceed
} else {
// ???
}
} else {
echo "Hi!";
}
}

public function __setAuthenticationStatus($isAuthenticated = false)
{
$this->authenticated = $isAuthenticated;
}
}

关于php - 在不同的方法参数上使用身份验证 (ReSTLer 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com