从Authorization HTTP标头获取身份验证令牌的值

时间:2014-02-15 21:35:20

标签: ruby-on-rails authentication http-headers

我希望仅当HTTP头中包含的授权令牌与users表中存储的令牌匹配时才允许访问资源。 我正在使用如下所示的curl来访问资源:

$ curl http://localhost:3000/api/v1/tasks.json -H 'Authorization: Token token="S8S4MPqFNdDz3G1jLsC9"'

tasks#index方法中,我想检查上面的令牌是否与存储在数据库中的当前用户的身份验证令牌相匹配。 如何将令牌值作为实例变量获取,以便我可以使用它,如下所示:

def index
  @token = ???
  if User.exists?(:authentication_token => @token)
    ### code to access the resource
  else
    authenticate_user!
  end
end

1 个答案:

答案 0 :(得分:1)

从此railscast,我发现最​​好的解决方案是使用rails authenticate_or_request_with_http_token方法,如下所示:

class Api::V1::TasksController < ApplicationController
  before_filter :restrict_access 
   respond_to :json

  def index
    @user = User.where("users.authentication_token IS NOT NULL").first
    @tasks = @user.tasks
  end

 private

  def restrict_access
    authenticate_or_request_with_http_token do |token, options|
    User.exists?(authentication_token: token)
  end
end