如何使用Firebase和Django Rest验证ID令牌?

如何使用Firebase和Django Rest验证ID令牌?,django,firebase,django-rest-framework,firebase-authentication,Django,Firebase,Django Rest Framework,Firebase Authentication,如果我使用Firebase auth并希望将其连接到django rest后端,我就无法理解身份验证是如何完成的 我使用firebase提供的getIdTokenResult: async login() { this.error = null; try { const response = await firebase.auth().signInWithEmailAndPassword(this.email, t

如果我使用Firebase auth并希望将其连接到django rest后端,我就无法理解身份验证是如何完成的

我使用firebase提供的
getIdTokenResult

 async login() {
            this.error = null;
            try {
                const response = await firebase.auth().signInWithEmailAndPassword(this.email, this.password);
                const token = await response.user.getIdTokenResult();

                /* 
                  No idea if this part below is correct 
                  Should I create a custom django view for this part?
                */

                 fetch("/account/firebase/", {
                     method: "POST",
                     headers: { 
                         "Content-Type": "application/json", 
                         "HTTP_AUTHORIZATION": token.token,
                     },
                     body: JSON.stringify({ username: this.email, password: this.password }),
                 }).then((response) => response.json().then((data) => console.log(data)));
            } catch (error) {
                this.error = error;
            }
        },
我在firebase文档中发现的唯一一件事是这段平淡的两行代码片段:

他们写的地方

decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']
# wtf, where does this go? 
# what do I do with this? Do I put it in a django View?
我在这里找到了一个将django rest连接到firebase的指南:

但我还是不明白这一切是怎么联系在一起的。我应该何时调用此
FirebaseAuthentication
。每当我尝试调用
login
函数时,我都会得到一个403
CSRF验证失败。请求中止。

我上面链接的指南提供了整个
FirebaseAuthentication
类-我应该将其添加为后端的路径吗

path("firebase/", FirebaseAuthentication, name="api-firebase"),

我的前端调用的api端点是哪一个?

您在这里的最终目标是什么?为什么要费心向后端发送ID令牌?如果您没有特定的用途,那么就没有必要了。我只使用firebase进行身份验证,其他一切都是通过Django和Postgres db完成的。因此,当用户被验证并在我的网站上提出各种请求(保存帖子、评论等)时,我将用户链接到该帖子/评论或他们正在执行的任何操作,您有代码来验证令牌,现在您有了用户的唯一标识符。我不明白你现在被困在哪里-只要在你认为适合你的应用程序的地方使用uid就行了。我不能用uid来验证用户吗?如何告诉后端用户已通过身份验证?如果他们试图提出请求,我只会得到403个错误。不知何故,我需要与我的后端通信“嘿,这是一个火箭弹令牌,考虑到作为用户X的身份验证”,你可以通过每个请求传递令牌,并在你代表用户之前对每个请求进行验证。客户端控制该令牌,而不是您的后端。令牌在1小时后过期,因此您不应将其保留在任何位置。让客户来管理。你的最终目标是什么?为什么要费心向后端发送ID令牌?如果您没有特定的用途,那么就没有必要了。我只使用firebase进行身份验证,其他一切都是通过Django和Postgres db完成的。因此,当用户被验证并在我的网站上提出各种请求(保存帖子、评论等)时,我将用户链接到该帖子/评论或他们正在执行的任何操作,您有代码来验证令牌,现在您有了用户的唯一标识符。我不明白你现在被困在哪里-只要在你认为适合你的应用程序的地方使用uid就行了。我不能用uid来验证用户吗?如何告诉后端用户已通过身份验证?如果他们试图提出请求,我只会得到403个错误。不知何故,我需要与我的后端通信“嘿,这是一个火箭弹令牌,考虑到作为用户X的身份验证”,你可以通过每个请求传递令牌,并在你代表用户之前对每个请求进行验证。客户端控制该令牌,而不是您的后端。令牌在1小时后过期,因此您不应将其保留在任何位置。让客户来管理。