web-dev-qa-db-fra.com

Comment faire passer un jeton au porteur à travers l'en-tête dans les rails?

Dans mon application Rails, je peux obtenir le jeton Authorization: Token token='aUthEnTicAtIonTokeN' passé dans l'en-tête de la requête avec

authenticate_with_http_token do |token, options|
 @auth_token = token
end

mais quand je passe le jeton en tant que Authorization: Bearer token='aUthEnTicAtIonTokeN', obtenir le jeton en tant que nil méthode ci-dessus.

comment puis-je obtenir un jeton porteur transmis par en-tête dans l'application Rails?

6
sat's

Vous pouvez obtenir le jeton porteur avec une méthode comme:

  def bearer_token
    pattern = /^Bearer /
    header  = request.headers['Authorization']
    header.gsub(pattern, '') if header && header.match(pattern)
  end

De même, lors de la définition de l'en-tête, il devrait être

Authorization: Bearer 'aUthEnTicAtIonTokeN'
13
Alex.U

Votre méthode fonctionnera correctement telle quelle, il vous suffit d'utiliser les guillemets corrects dans la demande.

L'utilisation de guillemets simples ' ne fonctionne pas, alors que les guillemets doubles " fonctionnent.

Pour référence, Rails gère les jetons de l'en-tête Authorization: dans l'un des formats suivants avec la méthode authenticate_with_http_token:

Bearer "token_goes_here"
Bearer token_goes_here
Bearer token="token_goes_here"
Bearer token=token_goes_here
Token token="token_goes_here"
Token token=token_goes_here
Token "token_goes_here"
Token token_goes_here

Je suis sûr que cette liste n’est pas exhaustive, mais elle donne une idée de ce qui est possible.

2
pronoob