Was ist der richtige Weg, um Autorisierungsheader vom Controller-Request-Objekt zu bekommen?

8

Ich habe zwei RSpec-Tests, eine Controller-Spezifikation und eine Anforderungsspezifikation, wo ich eine GET-Anfrage an die Index-Aktion desselben Controllers mache. In beiden Spezifikationen sende ich einen Authorization-Header, der ein Oauth2-Bearer-Token enthält.

Das Problem, das ich habe, ist, dass der Header je nach Art der Spezifikation in einer anderen Eigenschaft des Anfrageobjekts gespeichert wird. Im Fall der Anforderungsspezifikation ist sie verfügbar unter request.env["Authorization"] und im Fall der Controller-Spezifikation ist sie unter request.session["Authorization"] verfügbar.

Warum wird "Authorization" an verschiedenen Orten für verschiedene Arten von Spezifikationen gespeichert? Gibt es irgendwo ich finde es für beide Spezifikationen?

Diese bearer_token -Methode ist in der Eltern-Controller-Klasse, wo ich das Token aus der Kopfzeile ergreife:

Funktioniert mit env in den Anforderungsspezifikationen:

%Vor%

Funktioniert mit session in den Controller-Spezifikationen:

%Vor%

Hier ist meine Anfrage:

%Vor%

Hier ist meine Controller-Spezifikation

%Vor%     
Peter Brown 08.08.2014, 14:41
quelle

1 Antwort

8

Ich nahm an, dass die API für die Methode get zwischen einer Anfrage und einer Controller-Spezifikation identisch wäre. In der Controller-Spezifikation ist das dritte Argument ein Hash der Sitzungsvariablen, keine Header-Variablen. Sie können die Header direkt auf das @request -Objekt wie folgt setzen:

%Vor%

Dann ist der richtige Weg, um den Autorisierungsheader zu bekommen:

%Vor%     
Peter Brown 08.08.2014, 14:56
quelle