1

我正在使用 truevault API 实现忘记密码功能。现在,我一直在使用 Postman 测试流程后的请求,并且它可以工作,但是,当我开始使用 axios 编码时,它不断抛出有关身份验证的问题。我尝试了几种组合(合乎逻辑的组合,而不仅仅是随机的疯狂)。

另外,值得一提的是,我能够从 UI 中列出我的 truevault 用户(不仅是邮递员),并尝试将相同的原则模仿到发布请求中,但它没有用

这是对我有用的邮递员请求:

  • 对于 url 请求,方法是:POST
  • 网址:https ://api.truevault.com/v1/password_reset_flows
  • 对于授权选项卡,我使用 truevault 用户 API 密钥填写“用户名”字段,并将“密码”字段留空
  • 在“正文”选项卡中,我用 Json 文本填充它,对于单选按钮选项,我选择了 raw,并选择了 json 作为格式。(这些是唯一使用的选项卡)

json主体如下

{
   "name":"XXXXX password reset",
   "sg_template_id":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXcf42",
   "sg_api_key":"XX.XXXXXXXXXXXXXXXXXXXXXX.XXXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXZftJo",
   "user_email_value_spec":{
      "system_field":"username"
   },
   "from_email_value_spec":{
      "literal_value":"do-not-reply@XXXXXX.com"
   },
   "substitutions":{
      "{{FIRST_NAME}}":{
         "user_attribute":"first_name"
      }
   }
}

结果是成功的,

现在,当我尝试使用 axios 时,我不断收到身份验证错误。代码如下:

createPasswordResetFlow()
{
    axios.defaults.headers.common["Authorization"] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27"; //tv user API KEY
    axios.defaults.headers.post["Content-Type"] = "application/json";


    var request = axios.post("https://api.truevault.com/v1/password_reset_flows",
        {
            auth:
            {
                username: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27',
                password: ""
            },
            data:
            {
                "name": "XXXXX password reset",
                "sg_template_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXcf42",
                "sg_api_key": "XX.XXXXXXXXXXXXXXXXXXXXXX.XXXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXZftJo",
                "user_email_value_spec":
                {
                    "system_field": "username"
                },
                "from_email_value_spec":
                {
                    "literal_value": "do-not-reply@XXXXXX.com"
                },
                "substitutions":
                {
                    "{{FIRST_NAME}}":
                    {
                        "user_attribute": "first_name"
                    }
                }
            }
        })
        .then((res) =>
        {
            console.log(res);

            return res.data.users;
        })
        .catch(error =>
        {
            console.log('error', error);
            return error;
        });
}

如前所述,我一直在研究和尝试,但无济于事,如果有人可以帮助我。

4

1 回答 1

0

您共享的 JS 代码有两个问题导致该问题:

  1. 设置默认 Auth 标头的行如下所示axios.defaults.headers.common["Authorization"] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27"; //tv user API KEY:请注意,授权标头设置为 API 密钥,而不是 HTTP 基本身份验证标头值。如果要以这种方式设置默认 auth 标头,则需要将其设置为,base64(API_KEY:)而不仅仅是API_KEY.

  2. 根据axios 文档, post 方法具有签名.post(url, data, config)。因此,您的代码正在 POST 一个看起来像{auth: ..., data: ...}.

尝试删除您设置授权标头的行,并将 post 调用更改为如下所示:

axios.post("https://api.truevault.com/v1/password_reset_flows",
        {
                "name": "XXXXX password reset",
                "sg_template_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXcf42",
                "sg_api_key": "XX.XXXXXXXXXXXXXXXXXXXXXX.XXXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXZftJo",
                "user_email_value_spec":
                {
                    "system_field": "username"
                },
                "from_email_value_spec":
                {
                    "literal_value": "do-not-reply@XXXXXX.com"
                },
                "substitutions":
                {
                    "{{FIRST_NAME}}":
                    {
                        "user_attribute": "first_name"
                    }
                }
            }
        }, {
                username: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27',
                password: ""
            })
于 2019-06-11T18:45:08.620 回答