我正在为移动应用编写webservice
。
现在,我的客户要求是authentication
的{{1}} API
应由An Access Key
完成,这将与Webservice调用一起提供。该访问密钥将根据会话而变化。
我搜索了很多地方并发现了一些文章和轨道广播,Oauth或其中一些文章暗示cancan gem也可以作为Role based management
。
但我需要针对该特定访问密钥进行身份验证。
请提出一些建议。
答案 0 :(得分:0)
您可以使用Devise.secure_compare方法。使用字段api_token:string创建用户模型。创建用户并生成随机,唯一的api_token。在API请求参数中传递那些api_token。
class ApiController < ApplicationController
before_filter :parse_request, :authenticate_user_from_token!
private
def authenticate_user_from_token!
if !@json['api_token']
render nothing: true, status: :unauthorized
else
@user = nil
User.find_each do |u|
if Devise.secure_compare(u.api_token, @json['api_token'])
@user = u
end
end
end
end
def parse_request
@json = JSON.parse(request.body.read)
end
end
所有API的控制器都将继承自ApiController
class ProjectsController < ApiController
end