微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Axios 将当前登录的用户 ID 放入具有 Firebase 身份验证的节点应用程序中

如何解决Axios 将当前登录的用户 ID 放入具有 Firebase 身份验证的节点应用程序中

我目前正在使用 Firebase 身份验证和 MERN 堆栈构建 Chrome 扩展。

我在前端反应应用程序中使用身份验证上下文和私有路由。我想使用 axios put 更新一个特定于每个用户的变量。使用 axios(put 方法) 更新时如何指定用户 id。

我在后端使用自定义令牌。知道如何在前端和后端之间传递 uid 吗?

解决方法

您不应在请求中传递 UID 本身。相反,您应该传递 Firebase ID 令牌,然后在后端使用 Firebase Admin SDK 对其进行验证。

您可以像这样获取当前用户的 ID Token,然后在您的 API 请求中传递它:

import Axios from "axios";

async makeRequest() {
  const idToken = await firebase.auth().currentUser.getIdToken();
  const response = await Axios({
    url: "YourURL",method: "PUT",headers: {authorization: `Bearer ${idToken}`},data: {...}
  })
  console.log(response.data)
}

我在授权中将 ID 令牌作为不记名令牌传递,但这取决于您。

要在后端验证令牌,您可以使用 .verifyIdToken 方法。

您可以在 Express 中间件中进行验证,这样您就不必一次又一次地复制代码:

const authMiddleware = (req,res,next) => {
  const {authorization} = req.headers;
  if (!authorization) return res.sendStatus(401);
  
  const token = authorization.split(" ");
  if (token[0] !== "Bearer") return res.sendStatus(401);

  const decodedToken = await admin.auth().verifyIdToken(idToken)
  console.log(decodedToken)
  req.decodedToken = decodedToken
  return next()
}


//Then on the endpoints where you need to authenticate user:
app.put("/route",authMiddleware,(req,res) => {
  //Process here
  //You can access the auth data by req.decodedToken
})

decodedToken 包含用户的 UID、自定义声明和一些元数据。您可以阅读更多相关信息here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。