我希望仅当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
答案 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