【问题标题】:How can I send a POST request to start a password reset flow using axios如何使用 axios 发送 POST 请求以启动密码重置流程
【发布时间】:2019-06-11 00:39:26
【问题描述】:

我正在使用 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;
        });
}

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

【问题讨论】:

    标签: post axios truevault


    【解决方案1】:

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

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

    2. 根据axios docs,post 方法具有签名.post(url, data, config)。因此,您的代码正在发布一个类似于{auth: ..., data: ...} 的 JSON 对象。

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

    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-11-24
      • 2022-01-15
      • 1970-01-01
      • 2022-11-02
      • 2016-12-18
      • 2019-08-22
      • 2020-04-25
      • 2021-06-08
      • 1970-01-01
      相关资源
      最近更新 更多