2017-10-15 1 views
1

Firebase와 Django를 실행하는 자체 서버를 사용하는 Android 앱을 개발 중입니다. 내가하려는 일은, 먼저 firebase 문서에 지정된대로 사용자 정의 토큰을 생성하는 django 서버에 안드로이드 응용 프로그램을 사용하여 사용자를 인증하려고합니다. 그런 다음 생성 된 사용자 토큰을 다시 Android로 보냅니다.Firebase Auth를 사용하여 android에 토큰을 다시 보내는 방법

제 질문은 어떻게 그 커스텀 토큰을 안드로이드에 다시 보내는 것입니까? 나는 JSON 객체로 보내려고했다. 그러나 JWT는 JSON을 직렬화 할 수 없다고합니다.

나는 json 객체로 안드로이드 응용 프로그램에서 사용자 이름과 암호를 전달하고 내 장고 서버로 인증했습니다.

여기 내 최소한의 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") 

답변

0

난 당신이 python3 버전을 사용하는 생각 :

는 그리고 이것은 오류입니다. 나는 그 문제가 무엇인지 발견했다.

auth.create_custom_token (uid) 메소드는 바이트 리터럴을 반환하며 바이트 리터럴은 JSON을 직렬화 할 수 없습니다. 그래서 당신은 오류가 발생합니다. 당신은 b ' jwt 토큰의 infront를 볼 수 있습니다.

그래서 아래 코드를 사용하여 바이트 리터럴을 문자열로 변환해야합니다.

custom_token = (auth.create_custom_token(uid)).decode() 
관련 문제