Django + Auth0“需要一个类似字节的对象,而不是'str'”python 3.5.2

时间:2017-11-20 10:51:32

标签: django python-3.5 auth0

我知道有一堆“像字节一样的对象是必需的,而不是'str'”的问题。但我已经尝试过,没有人解决我的问题。 如果你能在我的特定情况下帮助我,那将是非常好的。

我正在使用Auth0 for django

的官方示例

https://github.com/auth0-samples/auth0-django-web-app/tree/master/01-Login

我正在尝试将django 1.11与Auth0连接并在此代码中出现错误

def get_user_details(self, response):
        # Obtain JWT and the keys to validate the signature
        idToken = response.get('id_token')
        jwks = request.urlopen("https://" + self.setting('DOMAIN') + "/.well-known/jwks.json")
        issuer = "https://" + self.setting('DOMAIN') + "/"
        audience = self.setting('KEY') #CLIENT_ID
        payload = jwt.decode(idToken, jwks.read(), algorithms=['RS256'], audience=audience, issuer=issuer).decode('UTF-8')

我曾尝试使用 .encode('utf-8') b“str”或“rb”/“wb”但仍然没有运气

提前感谢您的帮助

----编辑----

使用

payload = jwt.decode(idToken, jwks.read().encode('utf-8'), algorithms=['RS256'], audience=audience, issuer=issuer).decode('UTF-8')

带我去其他错误 'bytes'对象没有属性'encode'

2 个答案:

答案 0 :(得分:1)

jwks.read()类型为“字节”,但在jws.py中为:

  

如果键中有“键”

期待str的列表,以便解决此问题,将其转换为str的列表:

def get_user_details(self, response):
    # Obtain JWT and the keys to validate the signature
    idToken = response.get('id_token')
    jwks = request.urlopen("https://" + self.setting('DOMAIN') + "/.well-known/jwks.json")
    issuer = "https://" + self.setting('DOMAIN') + "/"
    audience = self.setting('KEY') #CLIENT_ID
    # convert to list str
    jws_read = bytearray(jwks.read()).decode('ascii')
    payload = jwt.decode(idToken, jws_read, algorithms=['RS256'], audience=audience, issuer=issuer)

答案 1 :(得分:0)

这是一个python 3 vs python 2问题(Auth0示例似乎是为python2.7x编写的)。

使用Auth0中的Flask示例项目时出现了类似的错误。为了解决这个问题,我修改了python-jose库。在jws.py的第222行,我改变了 key = json.loads(key)key = json.loads(key.decode('utf-8'))。这对我有用,我希望它适合你。

希望这会有所帮助。

我已经分开了jose包,但还没有把PR放进去。