【发布时间】:2018-03-27 02:52:31
【问题描述】:
我正在开发一个使用 Firebase 和我自己的运行 Django 的服务器的 Android 应用程序。我打算做的是,我想首先使用 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')
但它说自定义令牌不是 JSON 可序列化的。这不是这样做的方法吗?如何将自定义令牌发送回 Android 应用?
这是错误:
uid:78b30d23-6238-4634-b2e4-73cc1f0f7486
custom_token:b'eyJraWQiOiAiZmFlNzA2MzZiY2UwZTk0Y2Y5YTM2OWRlNzc4ZDZlYWQ5NGMwM2MzYiIsICJhbGciOiAiUlMyNTYiLCAidHlwIjogIkpXVCJ9.eyJpc3MiOiAiZmlyZWJhc2UtYWRtaW5zZGstOXBtbjVAYnVzdHJhY2tlci0xZDE3OS5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsICJ1aWQiOiAiNzhiMzBkMjMtNjIzOC00NjM0LWIyZTQtNzNjYzFmMGY3NDg2IiwgImF1ZCI6ICJodHRwczovL2lkZW50aXR5dG9vbGtpdC5nb29nbGVhcGlzLmNvbS9nb29nbGUuaWRlbnRpdHkuaWRlbnRpdHl0b29sa2l0LnYxLklkZW50aXR5VG9vbGtpdCIsICJleHAiOiAxNTA4MDc2OTA4LCAiaWF0IjogMTUwODA3MzMwOCwgInN1YiI6ICJmaXJlYmFzZS1hZG1pbnNkay05cG1uNUBidXN0cmFja2VyLTFkMTc5LmlhbS5nc2VydmljZWFjY291bnQuY29tIn0 = .jgexW_xR5FeZvuO5TPWO8EOBnRJ28ut9OR_OxeajE1_o4ns4fwd2pMXlK2GkM464P5Vi-IxheG-IIJcANxGSDeZgvgpkLfKkHMZeSaraqfEQGq6N7ipuD8o1T7zd5qm79twmFbrQZRB1y7g1-zcjL69x8KFsThWOTmo0TYj5l3zf8_2Cxbw2SGefMWkCwL0d1yQjcUqVyuSAP3-Sg8KrrqCcG4cjNOXKeWxwbUQO7DobOQlT5TfRApwWk8Td6uPjD7d6jqMo-HPKOis0vRoXMBzflZKj36-hIOFkygZNbDWLTsQzbb3HZg8dBabA5GTy - iQi038TRMIm2W0irr0ng ==' P>
内部服务器错误:/api/user/validateuser/ Traceback(最近 最后调用):文件 “/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py”, 第 41 行,在内部 response = get_response(request) 文件“/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py”, 第 249 行,在 _legacy_get_response response = self._get_response(request) 文件 "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", 第 187 行,在 _get_response response = self.process_exception_by_middleware(e, request) 文件 "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", 第 185 行,在 _get_response 中 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 行,在 验证用户 返回 HttpResponse(json.dumps(result), content_type='application/json') 文件 “/usr/lib/python3.5/json/init.py”,第 230 行,在转储中 return _default_encoder.encode(obj) File "/usr/lib/python3.5/json/encoder.py", line 198, in encode chunks = 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 行,默认
raise TypeError(repr(o) + " is not JSON serializable")
【问题讨论】:
标签: android python json django firebase-authentication