Smooch预创建应用用户API需要范围应用和userId,但也不允许userId使用范围应用

时间:2017-02-21 15:39:33

标签: smooch

请求的验证与请求的要求之间似乎存在冲突。 API调用要求将范围设置为“app”。它还需要userId。但是,当两者合并时,您会得到以下消息,表明您无法将两者合并。

API https://docs.smooch.io/rest/#pre-create-app-user

REQUEST

{ host: 'api.smooch.io',
  path: '/v1/appusers',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${token}`
}

示例正文。

{
  scope: 'app',
  userId: 'some_userId',
  credentialRequired: true,
  email: 'test@email.com',
  properties: { picture: 'https://s.gravatar.com/avatar/.....' }
}

回应身体

{"error":{"code":"bad_request","description":"Invalid JWT body. Cannot use userId param with app scope"}}

响应标题

  { connection: 'close',
     server: 'nginx',
     date: 'Tue, 21 Feb 2017 14:47:50 GMT',
     'content-type': 'application/json; charset=utf-8',
     'content-length': '105',
     'x-powered-by': 'Express',
     vary: 'X-HTTP-Method-Override',
     etag: 'W/"69-huba/v8EazhrDAoySthrKw"',
     via: '1.1 vegur' },
  statusCode: 400,
  statusMessage: 'Bad Request' }

1 个答案:

答案 0 :(得分:0)

我认为您可能会混淆两个单独的概念--JWT有效负载与HTTP请求正文。

scope在JWT凭据的有效内容中定义(代码示例中为Bearer ${token})。有关JWT和范围的更多信息可以在here找到。

应在HTTP请求正文中指定

userId

我不确定您使用的是哪种语言,但这是Node.js中的一个示例:

var jwt = require('jsonwebtoken');
var token = jwt.sign({ scope: 'app' }, SECRET, { headers : { kid: KEY_ID } });

var request = require('request');
request.post({
    url: 'https://api.smooch.io/v1/appusers',
    headers: {
        'Authorization': `Bearer ${token}`
    },
    json: {
        userId: 'some_userId',
        credentialRequired: true,
        email: 'test@email.com',
        properties: { picture: 'https://s.gravatar.com/avatar/.....' }
    }
});