2016-05-26 19 views
0

Ich habe eine Phoenix-App mit Guardian und Uberauth gesichert, die Beiträge von einer Knoten-App (GraphQL-Server) erhält. Es wird gesichert, indem ein JWT im Berechtigungsheader übergeben wird.Poison.Encoder Ausnahme in Phoenix App

Die Ermächtigung scheint gut zu funktionieren, aber in meinen Phoenix-Controller, es mit Sprengung wird

** (FunctionClauseError) no function clause matching in Poison.Encoder.BitString.chunk_size/3 (poison) lib/poison/encoder.ex:127: Poison.Encoder.BitString.chunk_size(<<5, 230, 171, 122, 183, 178, 38, 22, 198, 114, 35, 162, 36, 133, 51, 83, 19, 34, 34, 194, 39, 71, 151, 2, 35, 162, 36, 165, 117, 66, 39, 13::size(4)>>, nil, 0)

Bevor ich Authentifizierung hinzugefügt, dies richtig funktioniert. Noch merkwürdiger ist, eine Locke Anfrage, wie folgt:

curl -i -H "authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJVc2VyOjIiLCJleHAiOjE0OTU2MjU3MjEsImlhdCI6MTQ2NDA4OTcyMSwiaXNzIjoiU2hvcHNoYXJlIiwianRpIjoiMDE2OTJjMzctM2QxYi00Yzc5LThiMjYtYzExN2QyNTM1MGI5IiwicGVtIjp7fSwic3ViIjoiVXNlcjoyIiwidHlwIjoidG9rZW4ifQ.GfqVSw3hPsy-zOp1yx6IXAGhM4uX0CsMbU3DHqtFCn7SQYPi24DJ2F4yC48cfiQi82-hvpUoxdnFm_x5osBb3w" -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"comment": {"content": "test"}}' http://localhost:8081/api/v1/current_user/products/1/comments

Works 100% richtig, wie erwartet!

Postausgangs Axios Anfrage wie folgt aussieht:

frontend_1 | { headers: frontend_1 | { authorization: 'Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJVc2VyOjIiLCJleHAiOjE0OTU3OTg4OTUsImlhdCI6MTQ2NDI2Mjg5NSwiaXNzIjoiU2hvcHNoYXJlIiwianRpIjoiYWE2YTE2M2YtYzM5ZC00ODVjLTgwMjEtMDMxMjUwNzc4YjcxIiwicGVtIjp7fSwic3ViIjoiVXNlcjoyIiwidHlwIjoidG9rZW4ifQ.4vosfEx69s_90UlCkgWNbxoNNAKuckYvqNRsqfznvzddI-k63LaXz7MWum82aSiHDkiw7L3tk6df8tZVh2Zz_A', frontend_1 | Accept: 'application/json', frontend_1 | 'Content-Type': 'application/json' }, frontend_1 | timeout: 0, frontend_1 | transformRequest: [ [Function: transformResponseJSON] ], frontend_1 | transformResponse: [ [Function: transformResponseJSON] ], frontend_1 | method: 'post', frontend_1 | url: 'http://api:8080/api/v1/current_user/products/2/comments', frontend_1 | data: { comment: { content: 'test' } }, frontend_1 | withCredentials: undefined }

ich ein bisschen ein bin verloren, was als nächstes zu versuchen. Es scheint, dass egal, was ich in der Nutzlast sende, die Char-Liste in Elixir gleich zu bleiben scheint. Ich kann nicht scheinen zu entschlüsseln, was in dieser Char-Liste ist, was ich vermute, ist ein Hinweis auf das, was vor sich geht.

+0

Ich weiß, dass Sie erwähnt haben, dass der Code funktionierte, bevor Sie Authentifizierung hinzugefügt haben, aber es ist immer noch sehr schwer zu sagen, was hier ohne Code passieren könnte. Können Sie Ihren Code bitte teilen? –

+0

Wie bei den meisten Problemen musste ich nur darauf schlafen und am nächsten Tag noch einmal darüber nachdenken, bevor ich realisierte, was falsch war. Danke für die Antwort :) – Samuel

Antwort

0

Irgendwann hatte ich beschlossen, das Authentifizierungs-Token mit Bearer voranzutreiben, aber ich verwendete keine Rollen in Guardian, als ich die Token erstellte. Als Guardian versuchte, das Token zu lesen, das ich zurückgeschickt hatte, verursachte es einen Fehler.