wake-up-neo.com

Token_authenticatable veraltet, was ist die Alternative?

Ich habe token_authenticatable bereits verwendet, um meine API abzusichern. Ich habe jedoch festgestellt, dass sie veraltet war. Was soll ich stattdessen verwenden und warum haben sie es abgelehnt?

36
harinsa

Aus ihrem Blog

"Wir können das von TokenAuthenticatable zur Verfügung gestellte Authentifizierungs-Token nicht verdauen, da diese häufig Teil von APIs sind, bei denen das Token häufig verwendet wird. Da die Verwendung des authentifizierbaren Token zwischen Anwendungen sehr unterschiedlich sein kann und jeweils unterschiedliche Sicherheitsgarantien erfordern, haben wir uns dazu entschieden TokenAuthenticatable von Devise entfernen, damit Benutzer die beste Option auswählen können. "

Es liegt nun an den Entwicklern, je nach ihrer Verwendung des Authentifizierungstokens die beste Wahl zu treffen.

Kasse diese Gist .

31
Jef

Ich wollte die Rückwärtskompatibilität beibehalten, also habe ich alles in ein Anliegen gestellt, um die Warnung zu vermeiden. Hier ist mein Code und die zugehörigen Spezifikationen:

/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

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
41
Neal

Ich habe diese Frage bereits beantwortet und eine Alternative mit Beispielcode zur Verfügung gestellt, der Folgendes beinhaltet: wie man OAuth 2.0 API/Token-Authentifizierung mit Rails und Warden ausführt.

Devise ist für APIs ziemlich irrelevant und ich fühlte mich immer unwohl, wenn ich versuchte, mit Devise zu ringen, damit es so funktioniert, wie ich es brauchte, also habe ich es aufgegeben Mein Beispiel verwendet.

0
Andrew Hacking

Ich habe die devise_token_auth gem verwendet, eine der Alternativen, die auf der Wiki-Seite Devise für die Token-Authentifizierung aufgeführt sind.

Ich weiß nicht, ob es jetzt der De-facto-Standard für Devise Token Auth ist oder nicht, aber es ist definitiv meine Wahl.

0
Jason Swett

Das sieht nach einer sehr alten Frage aus, trotzdem werde ich hier eine großartige gem für die Platte veröffentlichen.

Sie können Ihre API mit dem Doorkeeper Gem sichern, einem hervorragenden Anbieter für Rails-Apps.

0
Sagar Ranglani