2017-02-14 234 views
3

我是新來的bigcommerce和jwt令牌。我正在嘗試讓客戶登錄api在trail商店上工作。但無法自動成功登錄客戶。Bigcommerce客戶登錄API(單點登錄)無效登錄問題

我得到它的工作一次或兩次,但現在它不再工作,並且無法找出奇怪的行爲,因爲代碼沒有任何改變。我嘗試了谷歌搜索,如果其他人有客戶登錄API的問題,但一無所獲。

我已經通過https://developer.bigcommerce.com/api/v2/#customer-login-api的教程並複製了所提供的示例。 有什麼我失蹤的代碼如下?

  • 我已經去了developer.bigcommerce.com並創建了一個草稿應用程序。
  • 我從草稿應用程序獲得了客戶端ID和客戶端密鑰。
  • 我已經進入我的試用商店併成功安裝了草稿應用程序。
  • 我已經在SSL上測試了此頁面。
  • 難道是因爲它是一家小商店,它只有在真正的商店纔有用?

謝謝。

這裏是下面的PHP代碼:

include "vendor/autoload.php"; 

use Bigcommerce\Api\Client as Bigcommerce; 
use Firebase\JWT\JWT; 

function getCustomerLoginToken($id, $redirectUrl = '', $requestIp = '') { 
    /* 
    if (empty(self::$client_secret)) { 
    throw new Exception('Cannot sign customer login tokens without a client secret'); 
    } 
    */ 

    $payload = array(
    'iss' => '#MyApp1's Client ID#', 
    'iat' => time(), 
    'jti' => bin2hex(random_bytes(32)), 
    'operation' => 'customer_login', 
    'store_hash' => '#Store Hash#', 
    'customer_id' => $id 
); 

    if (!empty($redirectUrl)) { 
    $payload['redirect_to'] = $redirectUrl; 
    } 

    if (!empty($requestIp)) { 
    $payload['request_ip'] = $requestIp; 
    } 

    return JWT::encode($payload, "#MyApp1's Client Secret#", "HS256"); 
} 

$jwt = getCustomerLoginToken(1); 

header("Location: " . 'https://store-#Store Hash#.mybigcommerce.com/login/token/' . $jwt); 
exit(); 

回答

2

有一對夫婦,可能會導致約束錯誤:

  • 必須在存儲(安裝該應用程序看起來像你的所有在這裏很好 - 你也可以使用在本地創建的API令牌進行測試 - https://support.bigcommerce.com/articles/Public/Store-API-Accounts/
  • 該應用必須具有登錄OAuth範圍
  • JWT URL必須在約30秒內訪問,否則將無法工作。
  • 生成JWT的計算機/服務器需要有一個同步的時鐘,否則您的IAT值將在超過30秒鐘之前創建,甚至在將來會失敗。
  • 該URL只能訪問一次 - 如果任何內容對目標運行GET請求,而不是預期的最終用戶的瀏覽器,它將不起作用。例如,如果您在Slack消息中發送URL,則鬆懈會嘗試通過訪問該鏈接來預覽該鏈接,並因此使其無效。
  • 這是很好的仔細檢查你的智威湯遜是有效的,在https://jwt.io/

的Bigcommerce支持訪問,如果你已經排除了上面可以揭示的情況較爲清淡日誌。

希望這會有所幫助!