如何发送回令牌使用火力地堡验证

问题描述:

我正在开发Android应用程序,它使用火力地堡和我自己的服务器上运行的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=='

Internal Server Error: /api/user/validateuser/ Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 41, in inner response = get_response(request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 249, in _legacy_get_response response = self._get_response(request) File "/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", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python3.5/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view return view_func(*args, **kwargs) File "/home/ubuntu/www/Tracker/user/api/views.py", line 251, in validateuser return HttpResponse(json.dumps(result), content_type='application/json') File "/usr/lib/python3.5/json/init.py", line 230, in dumps return _default_encoder.encode(obj) File "/usr/lib/python3.5/json/encoder.py", line 198, in encode chunks = self.iterencode(o, _one_shot=True) File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode return _iterencode(o, 0) File "/usr/lib/python3.5/json/encoder.py", line 179, in default

raise TypeError(repr(o) + " is not JSON serializable") 

我想你使用python3版本。我发现问题是什么。

的auth.create_custom_token(UID)方法返回一个字节文字和字节字面不JSON序列化的。这就是你遇到错误的原因。您可以看到b'盈方的jwt令牌。

所以,你只是需要用下面的代码转换文本字符串的字节。

custom_token = (auth.create_custom_token(uid)).decode()