Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 无法验证Firebase令牌_Django_Flutter_Firebase Admin_Oauth2client_Python Jose - Fatal编程技术网

Django 无法验证Firebase令牌

Django 无法验证Firebase令牌,django,flutter,firebase-admin,oauth2client,python-jose,Django,Flutter,Firebase Admin,Oauth2client,Python Jose,我正在制作一个应用程序在颤栗使用谷歌登录。我还有一个Django后端链接到应用程序,我想验证Django后端中的用户。我在互联网上找到了很多解决方案,但没有一个有效。也许我在什么地方搞砸了 我尝试使用python jose进行验证,代码如下: from jose import jwt import urllib.request, json token = '<token recieved using await user.getIdToken in flutter>' target_

我正在制作一个应用程序在颤栗使用谷歌登录。我还有一个Django后端链接到应用程序,我想验证Django后端中的用户。我在互联网上找到了很多解决方案,但没有一个有效。也许我在什么地方搞砸了

我尝试使用python jose进行验证,代码如下:

from jose import jwt
import urllib.request, json
token = '<token recieved using await user.getIdToken in flutter>'
target_audience = "<tried projectid/appid>"
certificate_url = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com'
response = urllib.request.urlopen(certificate_url)
certs = response.read()
certs = json.loads(certs)
print(certs)
user = jwt.decode(token, certs, algorithms='RS256', 
audience=target_audience)
我还尝试了firebase_admin for python:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import auth
cred = credentials.Certificate('<firebase service accounts private key>')
default_app = firebase_admin.initialize_app(cred)
token = 'token from flutter'
verifyied =auth.verify_id_token(id_token=token)
导入firebase\u管理
从firebase_管理员导入凭据
从firebase_管理导入验证
cred=凭证。证书(“”)
默认应用程序=firebase应用程序管理。初始化应用程序(cred)
token='来自Flatter的token'
verifyied=auth.verify\u id\u token(id\u token=token)
为了检查firebase_admin库本身是否正常工作,我将用户ID从应用程序传递到服务器,并尝试使用firebase_admin删除用户,我可以做到这一点。但由于某种原因,我无法验证令牌


谢谢你的帮助。

回答我自己的问题。问题是我的服务器没有实际部署,因此,当用户登录并将其粘贴到python代码中并尝试验证令牌时,我正在复制vscode控制台中打印的令牌。结果它不是那样工作的

我托管了我的Django应用程序,并在post请求中传递了令牌,然后尝试验证令牌,它成功了

如果遇到问题,您可以在此处参考解决方案:
我也面临同样的问题

案例:

最初:我在vscode控制台中打印身份验证令牌,并在终端中进行验证

它给了我一个错误:令牌长度不能超过%4

我尝试从
jwt.io
验证令牌,它似乎是正确的

问题的实际原因:

vscode的控制台输出(在我的例子中是windows 7和64位)。一行限制为1064个字符

虽然令牌的实际长度应该是1170个字符

解决方案:


在vscode控制台中打印子字符串,并在python shell中加入它们以进行验证。

在看到您的答案之前,我几乎花了2个小时手动验证Firebase ID令牌,但没有成功。因此,Android Logcat对消息也有类似的字符限制。当我试着把它分成两部分,把它们放在单独的日志消息中,加入它们时,我绝望的尝试终于成功了。
import firebase_admin
from firebase_admin import credentials
from firebase_admin import auth
cred = credentials.Certificate('<firebase service accounts private key>')
default_app = firebase_admin.initialize_app(cred)
token = 'token from flutter'
verifyied =auth.verify_id_token(id_token=token)