mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 18:16:38 +08:00
Add id token cache key for each user
This commit is contained in:
parent
a1413782e9
commit
b42e9436ae
7 changed files with 15 additions and 62 deletions
|
@ -10,7 +10,6 @@ declare(strict_types=1);
|
|||
namespace WooCommerce\PayPalCommerce\ApiClient;
|
||||
|
||||
use WC_Order;
|
||||
use WooCommerce\PayPalCommerce\ApiClient\Authentication\SdkClientToken;
|
||||
use WooCommerce\PayPalCommerce\ApiClient\Authentication\UserIdToken;
|
||||
use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache;
|
||||
use WooCommerce\PayPalCommerce\ApiClient\Helper\FailureRegistry;
|
||||
|
@ -100,15 +99,12 @@ class ApiModule implements ModuleInterface {
|
|||
|
||||
add_action(
|
||||
'wp_logout',
|
||||
function() use ( $c ) {
|
||||
function( int $user_id ) use ( $c ) {
|
||||
$client_credentials_cache = $c->get( 'api.client-credentials-cache' );
|
||||
assert( $client_credentials_cache instanceof Cache );
|
||||
|
||||
if ( $client_credentials_cache->has( UserIdToken::CACHE_KEY ) ) {
|
||||
$client_credentials_cache->delete( UserIdToken::CACHE_KEY );
|
||||
}
|
||||
if ( $client_credentials_cache->has( SdkClientToken::CACHE_KEY ) ) {
|
||||
$client_credentials_cache->delete( SdkClientToken::CACHE_KEY );
|
||||
if ( $client_credentials_cache->has( UserIdToken::CACHE_KEY . '-' . (string) $user_id ) ) {
|
||||
$client_credentials_cache->delete( UserIdToken::CACHE_KEY . '-' . (string) $user_id );
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
@ -72,23 +72,16 @@ class SdkClientToken {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns `sdk_client_token` which uniquely identifies the payer.
|
||||
*
|
||||
* @param string $target_customer_id Vaulted customer id.
|
||||
* Returns the client token for SDK `data-sdk-client-token`.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws PayPalApiException If the request fails.
|
||||
* @throws RuntimeException If something unexpected happens.
|
||||
*/
|
||||
public function sdk_client_token( string $target_customer_id = '' ): string {
|
||||
public function sdk_client_token(): string {
|
||||
if ( $this->cache->has( self::CACHE_KEY ) ) {
|
||||
$user_id = $this->cache->get( self::CACHE_KEY )['user_id'] ?? 0;
|
||||
$access_token = $this->cache->get( self::CACHE_KEY )['access_token'] ?? '';
|
||||
|
||||
if ( $user_id === get_current_user_id() && $access_token ) {
|
||||
return $access_token;
|
||||
}
|
||||
$this->cache->get( self::CACHE_KEY );
|
||||
}
|
||||
|
||||
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
||||
|
@ -97,15 +90,6 @@ class SdkClientToken {
|
|||
|
||||
$url = trailingslashit( $this->host ) . 'v1/oauth2/token?grant_type=client_credentials&response_type=client_token&intent=sdk_init&domains[]=' . $domain;
|
||||
|
||||
if ( $target_customer_id ) {
|
||||
$url = add_query_arg(
|
||||
array(
|
||||
'target_customer_id' => $target_customer_id,
|
||||
),
|
||||
$url
|
||||
);
|
||||
}
|
||||
|
||||
$args = array(
|
||||
'method' => 'POST',
|
||||
'headers' => array(
|
||||
|
@ -126,13 +110,7 @@ class SdkClientToken {
|
|||
}
|
||||
|
||||
$access_token = $json->access_token;
|
||||
|
||||
$data = array(
|
||||
'access_token' => $access_token,
|
||||
'user_id' => get_current_user_id(),
|
||||
);
|
||||
|
||||
$this->cache->set( self::CACHE_KEY, $data );
|
||||
$this->cache->set( self::CACHE_KEY, $access_token );
|
||||
|
||||
return $access_token;
|
||||
}
|
||||
|
|
|
@ -82,13 +82,8 @@ class UserIdToken {
|
|||
* @throws RuntimeException If something unexpected happens.
|
||||
*/
|
||||
public function id_token( string $target_customer_id = '' ): string {
|
||||
if ( $this->cache->has( self::CACHE_KEY ) ) {
|
||||
$user_id = $this->cache->get( self::CACHE_KEY )['user_id'] ?? 0;
|
||||
$id_token = $this->cache->get( self::CACHE_KEY )['id_token'] ?? '';
|
||||
|
||||
if ( $user_id === get_current_user_id() && $id_token ) {
|
||||
return $id_token;
|
||||
}
|
||||
if ( $this->cache->has( self::CACHE_KEY . '-' . (string) get_current_user_id() ) ) {
|
||||
return $this->cache->get( self::CACHE_KEY . '-' . (string) get_current_user_id() );
|
||||
}
|
||||
|
||||
$url = trailingslashit( $this->host ) . 'v1/oauth2/token?grant_type=client_credentials&response_type=id_token';
|
||||
|
@ -122,12 +117,7 @@ class UserIdToken {
|
|||
|
||||
$id_token = $json->id_token;
|
||||
|
||||
$data = array(
|
||||
'id_token' => $id_token,
|
||||
'user_id' => get_current_user_id(),
|
||||
);
|
||||
|
||||
$this->cache->set( self::CACHE_KEY, $data );
|
||||
$this->cache->set( self::CACHE_KEY . '-' . (string) get_current_user_id(), $id_token );
|
||||
|
||||
return $id_token;
|
||||
}
|
||||
|
|
|
@ -280,15 +280,7 @@ class AxoModule implements ModuleInterface {
|
|||
array $localized_script_data
|
||||
): array {
|
||||
try {
|
||||
$target_customer_id = '';
|
||||
if ( is_user_logged_in() ) {
|
||||
$target_customer_id = get_user_meta( get_current_user_id(), '_ppcp_target_customer_id', true );
|
||||
if ( ! $target_customer_id ) {
|
||||
$target_customer_id = get_user_meta( get_current_user_id(), 'ppcp_customer_id', true );
|
||||
}
|
||||
}
|
||||
|
||||
$sdk_client_token = $api->sdk_client_token( $target_customer_id );
|
||||
$sdk_client_token = $api->sdk_client_token();
|
||||
$localized_script_data['axo'] = array(
|
||||
'sdk_client_token' => $sdk_client_token,
|
||||
);
|
||||
|
|
|
@ -71,7 +71,10 @@ export const loadPaypalScript = ( config, onLoaded, onError = null ) => {
|
|||
}
|
||||
|
||||
// Load PayPal script for special case with data-client-token
|
||||
if ( config.data_client_id?.set_attribute ) {
|
||||
if (
|
||||
config.data_client_id?.set_attribute &&
|
||||
config.vault_v3_enabled !== '1'
|
||||
) {
|
||||
dataClientIdAttributeHandler(
|
||||
scriptOptions,
|
||||
config.data_client_id,
|
||||
|
|
|
@ -187,9 +187,6 @@ class LoginSellerEndpoint implements EndpointInterface {
|
|||
if ( $this->cache->has( PayPalBearer::CACHE_KEY ) ) {
|
||||
$this->cache->delete( PayPalBearer::CACHE_KEY );
|
||||
}
|
||||
if ( $this->client_credentials_cache->has( UserIdToken::CACHE_KEY ) ) {
|
||||
$this->client_credentials_cache->delete( UserIdToken::CACHE_KEY );
|
||||
}
|
||||
if ( $this->client_credentials_cache->has( SdkClientToken::CACHE_KEY ) ) {
|
||||
$this->client_credentials_cache->delete( SdkClientToken::CACHE_KEY );
|
||||
}
|
||||
|
|
|
@ -502,9 +502,6 @@ class SettingsListener {
|
|||
if ( $this->cache->has( PayPalBearer::CACHE_KEY ) ) {
|
||||
$this->cache->delete( PayPalBearer::CACHE_KEY );
|
||||
}
|
||||
if ( $this->client_credentials_cache->has( UserIdToken::CACHE_KEY ) ) {
|
||||
$this->client_credentials_cache->delete( UserIdToken::CACHE_KEY );
|
||||
}
|
||||
if ( $this->client_credentials_cache->has( SdkClientToken::CACHE_KEY ) ) {
|
||||
$this->client_credentials_cache->delete( SdkClientToken::CACHE_KEY );
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue