1

今のところ私のコードは次のとおりです。

$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 への接続を管理するための最善の方法ですか?

4

1 に答える 1

2

既存のトークン ID を再利用しているため、永続的なセッションを維持するための優れた戦略のようです。他の唯一の提案は、MySQL トランザクションを作成するのではなく、資格情報をローカル ファイルにキャッシュすることです。テナント ID とサービス カタログは、ソフトウェア レイヤーから簡単に取得できるため、実際に保存する必要はありません。

既存のトークンの有効性を確認するには、次のようにします。

$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()は、通常、事前に別のチェックを行います。つまり、有効期限の値をチェックします (つまり、過去のものではない)。同じことを実装できます (資格情報を更新して保存する必要があるかどうかを確認するため)。

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

ところで、私たちは最近この機能を変更して、 が をexportCredentials()呼び出すようauthenticate()にしました。これは、自分で呼び出す必要がないことを意味します。しかし、現在のバージョンではそのままにしておく価値があります。

それはすべてに答えますか?

于 2013-09-06T07:31:31.007 に答える