You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue调用Firebase Auth REST API出现400 Bad Request错误求助

问题描述

遇到400 Bad Request错误,请求详情如下:

POST

scheme
 https
host
 identitytoolkit.googleapis.com
filename
 /v1/accounts:signUp
key
 AIzaSyAk1ueCLjDDWCNrt_23o5A4RCfeaYIlN6k
Address
 74.125.24.95:443
Status
400
Bad Request
VersionHTTP/3
Transferred850 B (198 B size)
Referrer Policystrict-origin-when-cross-origin
Request PriorityHighest


access-control-allow-origin
 http://localhost:8080
access-control-expose-headers
 date,vary,vary,vary,content-encoding,server,content-length
alt-svc
 h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
cache-control
 no-cache, no-store, max-age=0, must-revalidate
content-encoding
 gzip
content-length
 129
content-type
 application/json; charset=UTF-8
date
 Mon, 24 Oct 2022 12:07:19 GMT
expires
 Mon, 01 Jan 1990 00:00:00 GMT
pragma
 no-cache
server
 ESF
vary
 Origin
vary
 X-Origin
vary
 Referer
x-content-type-options
 nosniff
x-frame-options
 SAMEORIGIN
x-xss-protection
 0

Accept
 */*
Accept-Encoding
 gzip, deflate, br
Accept-Language
 en-US,en;q=0.5
Connection
 keep-alive
Content-Length
 79
Content-Type
 text/plain;charset=UTF-8
Host
 identitytoolkit.googleapis.com
Origin
 http://localhost:8080
Referer
 http://localhost:8080/
Sec-Fetch-Dest
 empty
Sec-Fetch-Mode
 cors
Sec-Fetch-Site
 cross-site
TE
 trailers
User-Agent
 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0

使用的Vue代码片段:

async auth() {
  let url =
  'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key= AIzaSyAk1ueCLjDDWCNrt_23o5A4RCfeaYIlN6k';
  if (this.mode=="signup") {
    url =
    'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key= AIzaSyAk1ueCLjDDWCNrt_23o5A4RCfeaYIlN6k';
  }
  const response = await fetch(url, {
    method: 'POST',
    body: JSON.stringify({
      email: localStorage.getItem('email'),
      password: localStorage.getItem('password'),
      returnSecureToken: true
    })
  });
  const responseData = await response.json();
  if (!response.ok) {
    const error = new Error(
      responseData.message || 'Failed to authenticate. Check your login data.'
    );
    console.log(error);
    throw error;
  }
  localStorage.setItem('token', responseData.idToken);
  localStorage.setItem('userId', responseData.localId);
  this.$store.state.token = localStorage.getItem('token');
  this.$store.state.userId = localStorage.getItem('userId');
}

按官方文档开发,不确定JSON.stringify是否出错,请问哪里有问题?


问题排查与修正

1. 请求Content-Type错误

从请求详情可见Content-Type为text/plain;charset=UTF-8,但Firebase Auth API要求请求体为JSON格式,必须指定Content-Type: application/json。fetch传输字符串类型的body时,默认会设置Content-Type为text/plain,因此需要手动添加headers配置。

2. API Key前存在多余空格

URL中key参数值前带有空格(如key= AIzaSy...),会导致API Key识别失败,需删除空格,改为key=AIzaSy...。

3. 可选检查:localStorage值有效性

确认localStorage.getItem('email')和localStorage.getItem('password')能获取到有效值,避免因值为null或空字符串导致请求体不符合API要求。

修正后的代码:

async auth() {
  // 去掉key参数前的空格
  let url = 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=AIzaSyAk1ueCLjDDWCNrt_23o5A4RCfeaYIlN6k';
  if (this.mode=="signup") {
    url = 'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyAk1ueCLjDDWCNrt_23o5A4RCfeaYIlN6k';
  }
  const response = await fetch(url, {
    method: 'POST',
    // 添加headers指定Content-Type为application/json
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      email: localStorage.getItem('email'),
      password: localStorage.getItem('password'),
      returnSecureToken: true
    })
  });
  const responseData = await response.json();
  if (!response.ok) {
    const error = new Error(
      responseData.message || '认证失败,请检查登录信息。'
    );
    console.log(error);
    throw error;
  }
  localStorage.setItem('token', responseData.idToken);
  localStorage.setItem('userId', responseData.localId);
  this.$store.state.token = localStorage.getItem('token');
  this.$store.state.userId = localStorage.getItem('userId');
}

内容的提问来源于stack exchange,提问作者maxloo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:30:48