devisetoken_authenticatable弃用,有什么替代?

我一直在使用token_authenticatable来保护我的API,但是,我发现它已被弃用? 我应该使用什么,为什么他们反对呢?

从他们的博客 :

“我们无法消化TokenAuthenticatable提供的身份validation令牌,因为它们通常是令牌被多次使用的API的一部分,因为可validation令牌的使用在不同的应用程序之间会有很大差异,每个应用程序都需要不同的安全保证,所以我们决定从Devise中删除TokenAuthenticatable,允许用户select最佳select。“

现在由开发人员根据他们对身份validation令牌的使用情况select最适合的方式。

结帐这个要点 。

我想保持向后兼容性,所以我只是把所有的事情都转移到一个关注点上来避免这个警告。 这是我的代码和相关的规格:

/app/models/concerns/token_authenticatable.rb

 module TokenAuthenticatable extend ActiveSupport::Concern module ClassMethods def find_by_authentication_token(authentication_token = nil) if authentication_token where(authentication_token: authentication_token).first end end end def ensure_authentication_token if authentication_token.blank? self.authentication_token = generate_authentication_token end end def reset_authentication_token! self.authentication_token = generate_authentication_token save end private def generate_authentication_token loop do token = Devise.friendly_token break token unless self.class.unscoped.where(authentication_token: token).first end end end 

/app/models/user.rb

 class User < ActiveRecord::Base include TokenAuthenticatable end 

/app/models/employee.rb

 class Employee < ActiveRecord::Base include TokenAuthenticatable end 

/spec/models/user_spec.rb

 describe User do it_behaves_like 'token_authenticatable' end 

/spec/models/employee_spec.rb

 describe Employee do it_behaves_like 'token_authenticatable' end 

规格/ shared_examples / token_authenticatable.rb

 shared_examples 'token_authenticatable' do describe '.find_by_authentication_token' do context 'valid token' do it 'finds correct user' do class_symbol = described_class.name.underscore item = create(class_symbol, :authentication_token) create(class_symbol, :authentication_token) item_found = described_class.find_by_authentication_token( item.authentication_token ) expect(item_found).to eq item end end context 'nil token' do it 'returns nil' do class_symbol = described_class.name.underscore create(class_symbol) item_found = described_class.find_by_authentication_token(nil) expect(item_found).to be_nil end end end describe '#ensure_authentication_token' do it 'creates auth token' do class_symbol = described_class.name.underscore item = create(class_symbol, authentication_token: '') item.ensure_authentication_token expect(item.authentication_token).not_to be_blank end end describe '#reset_authentication_token!' do it 'resets auth token' do end end end 

我之前已经回答了这个问题,并提供了一个示例代码的替代scheme,涵盖了如何使用Rails和Warden进行OAuth 2.0 API /令牌authentication 。

devise对于API来说是非常不相关的,我总是觉得不适应Devise与我需要的方式进行合作,所以我放弃了它,但是Devise所依赖的Warden中间件仍然支持多种身份validation策略,我的例子使用。

我一直使用Devise wiki页面中列出的用于令牌authentication的devise_token_auth gem。

我不知道现在是否是Devise token auth的事实标准,但这绝对是我的目标。

这看起来像一个非常古老的问题,但我会在这里logging一个真棒gem

您可以使用Doorkeeper Gem来保护您的API,这是一个非常棒的Rails应用程序oauth提供程序。