Ruby on Rails
Authentifizieren Sie die API mit Devise
Suche…
Einführung
Devise ist eine Authentifizierungslösung für Rails. Bevor ich weiter gehe, möchte ich noch eine kurze Anmerkung zur API hinzufügen. Daher behandelt die API keine Sitzungen (ist zustandslos), dh eine, die nach Ihrer Anforderung eine Antwort liefert, und erfordert dann keine weitere Aufmerksamkeit. Das bedeutet, dass kein früherer oder zukünftiger Status erforderlich ist, damit das System funktioniert, wenn wir eine Anfrage an den Server stellen Authentifizierungsdetails mit allen APIs übergeben und sollte Devise anweisen, Authentifizierungsdetails nicht zu speichern.
Fertig machen
Zuerst werden wir ein Schienenprojekt und ein Setup-Gerät erstellen
Erstellen Sie eine Schienenanwendung
rails new devise_example
füge jetzt der Edelsteinliste Gerät hinzu
Sie finden eine Datei mit dem Namen 'Gemfile' im Stammverzeichnis des rail-Projekts
Führen Sie dann die bundle install
Als Nächstes müssen Sie den Generator ausführen:
rails generate devise:install
Nun können Sie auf der Konsole einige Anweisungen finden, die Sie befolgen.
Erstellen Sie das Modellmodell
rails generate devise MODEL
Führen Sie dann rake db:migrate
Weitere Informationen finden Sie unter: Devise Gem
Authentifizierungs-Token
Das Authentifizierungstoken wird verwendet, um einen Benutzer mit einem eindeutigen Token zu authentifizieren. Bevor wir mit der Logik fortfahren, müssen wir einem Devise-Modell das Feld auth_token
hinzufügen
Daher,
rails g migration add_authentication_token_to_users
class AddAuthenticationTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :auth_token, :string, default: ""
add_index :users, :auth_token, unique: true
end
end
Führen Sie dann rake db:migrate
Jetzt sind wir auth_token
, die Authentifizierung mit auth_token
In app/controllers/application_controllers.rb
Zuerst diese Linie dazu
respond_to :html, :json
Dies hilft Rails-Anwendungen, sowohl mit HTML als auch mit Json zu reagieren
Dann
protect_from_forgery with: :null
wird dies ändern :null
da wir uns nicht mit Sitzungen beschäftigen.
Jetzt fügen wir in application_controller eine Authentifizierungsmethode hinzu
Standardmäßig verwendet Devise email als eindeutiges Feld. Wir können auch benutzerdefinierte Felder verwenden. In diesem Fall authentifizieren wir uns mit user_email und auth_token.
before_filter do
user_email = params[:user_email].presence
user = user_email && User.find_by_email(user_email)
if user && Devise.secure_compare(user.authentication_token, params[:auth_token])
sign_in user, store: false
end
end
Hinweis: Der obige Code basiert rein auf Ihrer Logik. Ich versuche nur, das Arbeitsbeispiel zu erklären
In Zeile 6 im obigen Code können Sie sehen, dass ich store: false
wodurch verhindert werden kann, dass für jede Anforderung eine Sitzung erstellt wird