Ionic+Angular读写Firebase规则保护数据时的令牌使用问题
问题1:认证令牌传递语法
- 你需要使用登录返回的
accessToken(也叫ID令牌)进行接口认证,refreshToken仅用于accessToken过期后续签新的有效凭证,不可直接用于接口请求认证,expirationTime用于判断令牌是否需要续签。 - Firebase实时数据库REST API的认证参数名确实为
auth,直接作为URL查询参数传递即可,Angular HttpClient写法示例如下:
import { HttpParams } from '@angular/common/http'; // GET请求示例 const getUrl = 'https://freelance-xxxx-default-tdb.firebaseio.com/xxxxxx.json'; const requestParams = new HttpParams().set('auth', 你存储的accessToken变量); return this.http.get<{ [key: string]: MyData }>(getUrl, { params: requestParams }).pipe(...) // PATCH请求示例同理 const patchUrl = 'https://freelance-xxxx-default-tdb.firebaseio.com/xxxxxx.json'; const updateData = { /* 你要更新的字段 */ }; return this.http.patch(patchUrl, updateData, { params: requestParams }).pipe(...)
- 注意
accessToken存在有效期,过期后发起请求会返回401权限错误,需提前使用refreshToken换取新的有效令牌再发起请求。
问题2:UID替代令牌与匿名登录相关疑问
- 不可以使用UID替代auth令牌,UID只是用户的身份标识,没有身份校验能力,直接传递UID无法通过Firebase规则校验,还会存在严重的安全泄露风险。
- 你提到的匿名登录场景下"首次访问没有UID"是因为没有走Firebase标准匿名登录流程:调用Firebase的
signInAnonymously()方法完成匿名登录后,Firebase会自动返回对应匿名用户的accessToken、refreshToken以及专属UID,完成该流程后发起请求时携带对应accessToken,即可满足你配置的auth != null规则要求。
内容的提问来源于stack exchange,提问作者Paul Mullen
相关产品推荐
相关产品推荐

