2017-02-14 218 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支持访问,如果你已经排除了上面可以揭示的情况较为清淡日志。

希望这会有所帮助!