首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用php-opencloud测试我是否拥有所有正确的凭据?

如何使用php-opencloud测试我是否拥有所有正确的凭据?
EN

Stack Overflow用户
提问于 2013-09-05 16:50:54
回答 1查看 256关注 0票数 1

这是我现在的代码:

代码语言:javascript
复制
$cloud = new Rackspace('https://identity.api.rackspacecloud.com/v2.0/', $php_cloudconfig['credentials']);
$array_creds = getCredentials();
$cloud->ImportCredentials($array_creds);

$array_creds = $cloud->ExportCredentials();
setCredentials($array_creds['authorization_token'], $array_creds['expiration'], $array_creds['tenant_id'], $array_creds['service_catalog']);

function getCredentials() {
    $sql_get_credential = "SELECT * FROM cloud_apiconnection";
    $q = $conn->prepare($sql_get_credential);
    return $q->execute();
}

function setCredentials($authorization_token, $expiration, $tenant_id, $service_catalog)     {
    $sql_insert = "INSERT INTO cloud_apiconnection (authorization_token, expiration, tenant_id, service_catalog) VALUES (:authorization_token, :expiration, :tenant_id, :service_catalog)";
    $q = $conn->prepare($sql_insert);
    $q->execute(array(':authorization_token' => $authorization_token, ':expiration' => $expiration, ':tenant_id' => $tenant_id, ':service_catalog' => $service_catalog));
}

是否有一种方法可以检测凭据是否更新在:$cloud->ImportCredentials($array_creds);?

我之所以徘徊,是因为如果不需要的话,我不想写信给DB。

这也是管理我与RackSpace API连接的最佳策略吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 07:31:31

这似乎是维护持久会话的好策略,因为您正在重用现有的令牌ID,唯一的其他建议是将凭据缓存在本地文件中,而不是进行MySQL事务处理。您实际上不需要存储租户ID和服务目录,因为它们很容易通过软件层检索。

要检查现有令牌的有效性,我会这样做:

代码语言:javascript
复制
$connection = new Rackspace(...);

// Import existing credentials
$credentials = getCredentials();
$connection->importCredentials($credentials);

// Authenticate against the API to make sure your token is still valid
$connection->authenticate();

// Compare result
$newCredentials = $connection->exportCredentials();

if ($newCredentials['authorization_token'] != $credentials['authorization_token']) {
   // You know it's been updated, so save new ones
   setCredentials();
}

authenticate()方法所做的就是针对Rackspace API执行一个请求;基于结果,它实际上让您知道您现有的内容是否仍然有效。当其他方法调用authenticate()时,它们通常会预先进行另一次检查:检查过期值(即不检查过去)。您可以实现它们所做的同样的事情(以确定是否需要刷新和保存凭据):

代码语言:javascript
复制
if (time() > ($credentials['expiration'] - RAXSDK_FUDGE)) {
   // They're old, you need to call authenticate()
} else {
   // They seem to be still valid. Sweet!
}

顺便说一句,我们最近改变了这个功能,以便exportCredentials()调用authenticate() -所以这意味着您不需要自己调用它。但是对于你现在的版本来说,这是值得的。

这能回答所有问题吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18641865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档