Sag*_*yal 1 python django android json firebase-authentication
我正在开发一个 Android 应用程序,它使用 Firebase 和我自己的运行 Django 的服务器。我打算做的是,我想首先使用 android 应用程序对用户进行身份验证到 django 服务器,然后生成 firebase 文档中指定的自定义令牌。然后我想将生成的自定义令牌发送回 android。
我的问题是如何将该自定义令牌发送回 android?我试图作为 JSON 对象发送。但它说 JWT 不是 JSON 可序列化的。
我将来自 android 应用程序的用户名和密码作为 json 对象传递,并通过我的 django 服务器进行了身份验证。
这是我的最小Django代码:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import auth
cred = credentials.Certificate("firebase-admin.json")
default_app = firebase_admin.initialize_app(cred)
def validateuser(request):
json_data=json.loads(request.body.decode('utf-8'))
try:
// I verify the username and password and extract the uid
uid = 'some-uid'
custom_token = auth.create_custom_token(uid)
result={'TAG_SUCCESS': 1, 'CUSTOM_TOKEN': custom_token }
except:
result={'TAG_SUCCESS': 0, 'CUSTOM_TOKEN': '0'}
return HttpResponse(json.dumps(result), content_type='application/json')
Run Code Online (Sandbox Code Playgroud)
但它说自定义令牌不是 JSON 可序列化的。这不是这样做的方法吗?如何将自定义令牌发送回 android 应用程序?
这是错误:
用户名:78b30d23-6238-4634-b2e4-73cc1f0f7486
custom_token:b'eyJraWQiOiAiZmFlNzA2MzZiY2UwZTk0Y2Y5YTM2OWRlNzc4ZDZlYWQ5NGMwM2MzYiIsICJhbGciOiAiUlMyNTYiLCAidHlwIjogIkpXVCJ9.eyJpc3MiOiAiZmlyZWJhc2UtYWRtaW5zZGstOXBtbjVAYnVzdHJhY2tlci0xZDE3OS5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsICJ1aWQiOiAiNzhiMzBkMjMtNjIzOC00NjM0LWIyZTQtNzNjYzFmMGY3NDg2IiwgImF1ZCI6ICJodHRwczovL2lkZW50aXR5dG9vbGtpdC5nb29nbGVhcGlzLmNvbS9nb29nbGUuaWRlbnRpdHkuaWRlbnRpdHl0b29sa2l0LnYxLklkZW50aXR5VG9vbGtpdCIsICJleHAiOiAxNTA4MDc2OTA4LCAiaWF0IjogMTUwODA3MzMwOCwgInN1YiI6ICJmaXJlYmFzZS1hZG1pbnNkay05cG1uNUBidXN0cmFja2VyLTFkMTc5LmlhbS5nc2VydmljZWFjY291bnQuY29tIn0 =。jgexW_xR5FeZvuO5TPWO8EOBnRJ28ut9OR_OxeajE1_o4ns4fwd2pMXlK2GkM464P5Vi-IxheG-IIJcANxGSDeZgvgpkLfKkHMZeSaraqfEQGq6N7ipuD8o1T7zd5qm79twmFbrQZRB1y7g1-zcjL69x8KFsThWOTmo0TYj5l3zf8_2Cxbw2SGefMWkCwL0d1yQjcUqVyuSAP3-Sg8KrrqCcG4cjNOXKeWxwbUQO7DobOQlT5TfRApwWk8Td6uPjD7d6jqMo-HPKOis0vRoXMBzflZKj36-hIOFkygZNbDWLTsQzbb3HZg8dBabA5GTy - iQi038TRMIm2W0irr0ng ==”
内部服务器错误:/api/user/validateuser/ Traceback(最近一次调用):文件“/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py”,第 41 行,在内部响应 = get_response(request) 文件“/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py”,第 249 行,在 _legacy_get_response 响应 = self._get_response(request) 文件"/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/local/lib /python3.5/dist-packages/django/core/handlers/base.py”,第 185 行,在 _get_response 响应 =wrapped_callback(request, *callback_args, **callback_kwargs) 文件“/usr/local/lib/python3.5/dist-packages/django/views/decorators/csrf.py”,第 58 行,在wrapped_view 中返回 view_func(*args, **kwargs) 文件“/home/ubuntu/www/Tracker/user/api/views.py ",第 251 行,在 validateuser 中返回 HttpResponse(json.dumps(result), content_type='application/json') 文件 "/usr/lib/python3.5/json/init .py”,第 230 行,在转储中返回 _default_encoder.encode(obj) 文件“/usr/lib/python3.5/json/encoder.py”,第 198 行,编码块 = self.iterencode(o, _one_shot= True) 文件“/usr/lib/python3.5/json/encoder.py”,第 256 行,在 iterencode 中返回 _iterencode(o, 0) 文件“/usr/lib/python3.5/json/encoder.py”,第 179 行,默认情况下
Run Code Online (Sandbox Code Playgroud)raise TypeError(repr(o) + " is not JSON serializable")
我认为您使用的是 python3 版本。我发现了问题所在。
auth.create_custom_token(uid) 方法返回一个字节文字,而字节文字不是 JSON 可序列化的。这就是您收到错误的原因。您可以在 jwt 令牌前面看到b'。
因此,您只需使用以下代码将字节文字转换为字符串。
custom_token = (auth.create_custom_token(uid)).decode()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |