我正在尝试基于Ruby on Rails 4.2.4为我的RESTful API实现令牌认证系统
我正在考虑制作三个独立的模型/表格:
这些是我的模特:
模型/ user.rb
if ( ! $dbh->ping ) { print "Unable to connect to database\n" } ;
模型/ token.rb
class User < ActiveRecord::Base
has_many :authentications
has_many :tokens
end
模型/ authentication.rb
class Token < ActiveRecord::Base
belongs_to :user
end
我不确定如何构建我的控制器以处理令牌和身份验证生成以及帐户链接。
提前感谢您的帮助!
答案 0 :(得分:1)
也许来自lucatironi的教程 - http://lucatironi.net/tutorial/2015/08/23/rails_api_authentication_warden/ - 可能是您的完美指南。它使用令牌颁发者服务进行多个身份验证会话和独立注销。
答案 1 :(得分:0)
我不明白为什么你将令牌分开,即使他们使用不同的设备他们使用不同的会话,所以从一个登出就不会从另一个登出。
建议您通过标头传递给令牌,然后在application_controller中执行过滤器,该过滤器将在任何验证令牌的请求之前运行:
class ApplicationController < ActionController::Base
before_filter :restrict_access
def restrict_access
authenticate_or_request_with_http_token do |token, options|
@user = Token.where(token: token).first.try(:user)
end
end
end
然后只有另一个过滤器来检查@user是否存在,否则发送401。
也是在用户找到为此最终用户生成会话之后。
答案 2 :(得分:0)
如果您使用的是authenticate_or_request_with_http_token do |token, options|
,则可以通过用逗号分隔请求值,将更多密钥发送到“授权”标头中的“选项”参数中。即
Authorization: Token aaa, token2=bbb, token3=ccc
这将解析并给您:
token = aaa
options = { 'token2' => 'bbb', 'token3' => 'ccc' }