J'utilisais token_authenticatable
auparavant pour sécuriser mon API. Cependant, j'ai constaté qu'elle était obsolète? Que devrais-je utiliser à la place et pourquoi l'ont-ils déconseillé?
Réponses
Trop de publicités?Je voulais garder la compatibilité ascendante alors j'ai juste déplacé le tout dans un souci d'éviter l'avertissement. Voici mon code et associés spécifications:
/app/models/préoccupations/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/modelsemployee.rb
class Employee < ActiveRecord::Base
include TokenAuthenticatable
end
/spec/modèles/user_spec.rb
describe User do
it_behaves_like 'token_authenticatable'
end
/spec/modèles/employee_spec.rb
describe Employee do
it_behaves_like 'token_authenticatable'
end
spec/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
À partir de leur blog :
"nous ne pouvons pas digérer le jeton d'authentification fourni par TokenAuthenticatable, comme ils font souvent partie de l'Api où le jeton est utilisé à de nombreuses reprises. Depuis l'utilisation de la authenticatable jeton peut varier considérablement entre les applications, chacune nécessitant des différentes garanties de sécurité, nous avons décidé de retirer TokenAuthenticatable de Concevoir, permettant aux utilisateurs de choisir la meilleure option."
C'est maintenant aux développeurs de choisir le meilleur ajustement en fonction de leur utilisation du jeton d'authentification.
Caisse de gist.
J'ai répondu à cette question auparavant et a fourni une alternative avec des exemples de code couvrant comment faire OAuth 2.0 API/Jeton d'authentification avec des Rails et le Préfet.
Concevoir est assez hors de propos pour l'API et je me sentais toujours mal à l'aise en essayant de se débattre avec les Concevoir pour le faire fonctionner de la façon dont j'avais besoin, donc j'ai abandonné, mais le Gardien du middleware qui Conçoivent est toujours utile pour la prise en charge de plusieurs stratégies d'authentification et est ce que mon exemple utilise.