如何在 rails 中通过 header 获取不记名令牌?

How to get bearer token passed through header in rails?

在我的 rails 应用程序中,我能够通过

获取请求 header 中传递的令牌 Authorization: Token token='aUthEnTicAtIonTokeN'
authenticate_with_http_token do |token, options|
 @auth_token = token
end

但是当我将令牌作为 Authorization: Bearer token='aUthEnTicAtIonTokeN' 获取令牌作为 nil 以上方法时。

如何在 rails 应用程序中通过 header 获取不记名令牌?

您可以通过以下方法获取 Bearer 令牌:

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

此外,设置 header 时应为:

Authorization: Bearer 'aUthEnTicAtIonTokeN'

您的方法将按原样正确工作,您只需要在请求中使用正确的引号。

使用单引号 ' 无效,而双引号 " 有效。

作为参考,rails 使用 authenticate_with_http_token 方法以下列任何格式处理来自 Authorization: header 的标记:

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

我确信这个列表并不详尽,但希望能给出一些可能的想法。

您也可以使用

request.headers['Authorization'].split(' ').last