Wenn jemand etwas Licht werfen könnte Es würde sehr geschätzt werden, da ich in dieser Angelegenheit etwas ratlos bin. Im Grunde versuche ich, die Geräteauthentifizierung mit einer JSON-Nur-Schienen-Ruhe-API-App zu realisieren, die auf rails-api Juwel.
Ich habe bereits die Verarbeitung von Sessions
und Registrations
wie unten beschrieben implementiert.
Bis jetzt läuft alles gut. In meinen anderen Controllern habe ich diese Zeile hinzugefügt, um sie zu sichern. before_filter :authenticate_user!
, aber ich bekomme diesen Fehler beim Aufruf mit auth_token. ? auth_token = xxxxxxxxxxx
undefined method authenticate_user!
Ich bin mir immer noch nicht sicher, was hier das Problem sein könnte - ich gehe davon aus, dass dies passiert, weil etwas fehlt, um richtig zu arbeiten, da es ActionController::API
UPDATE
Es scheint das Problem ist mit meinem routes.rb
selbst - So werden die Routen gemacht.
Wenn nun devise_for :users
außerhalb des Bereichs wiederholt wird, hat alles funktioniert.
Hat jemand eine Erklärung warum?
Schritt 1. Setzen Sie Controller mit benutzerdefinierten Controllern außer Kraft, die Weiterleitungen mit JSON-Antworten ersetzen. Hier ist ein benutzerdefinierter SessionController, der JSON-Antworten verwendet .
Schritt 2. Wenn ein Authentifizierungsfehler auftritt, geht das Steuerelement zu warden, das eine failure_app verwendet, die nichts anderes als eine Rack-Anwendung ist, die die Flash-Nachrichten setzt und auf dem angeforderten Format rendert / weiterleitet. Sie benötigen eine benutzerdefinierte JSON-Antwort mit einem Fehlerschlüssel, der anstelle des Standardfehlerschlüssels ein Array von Fehlern enthält. Sie benötigen also eine custom_auth_failure_app.rb unter config / initializers mit diesem Inhalt .
Schritt 4. Jetzt müssen wir Devise mitteilen, dass die benutzerdefinierte Fehler-App verwendet werden soll, indem Sie diese zu config/initializers/devise.rb
hinzufügen:
Schritt 5. Aktivieren Sie token_authenticatable
im Entwicklungsmodell und fügen Sie config/initializers/devise.rb
Schritt 6. Wenn Sie eine echte JSON-API verwenden, die keine Sitzung verwendet, verwenden Sie eine Version von warden (& gt; 1.2.2), die über Patches für eine Sitzung ohne Nullen verfügt.
Lesen Sie auch meinen Blogeintrag zum Erstellen einer getesteten, dokumentierten und versionierten JSON-API mit Rails4 + Rails-API + Devise , die über all diese Schritte sprechen.
Wenn jemand das gleiche Problem hat, bei dem die Hilfsprozeduren wie authenticate_user
nicht funktionieren, wenn Sie devise_token_auth
und rails-api
verwenden, versuchen Sie, diese Zeile zu app / controllers / application_controller.rb hinzuzufügen:
include DeviseTokenAuth::Concerns::SetUserByToken
Wenn Sie die Installation von devise_token_auth
ausführen, sollte dies automatisch in ApplicationController erstellt werden . Dieses Problem gibt Zugriff auf die Hilfsmethoden wie authenticate_user
. Problem ist, dass dieses Problem nicht hinzugefügt wird , wenn Sie rails-api
anstelle von Vanilla Rails verwenden. Also müssen Sie es manuell hinzufügen.
Ich bin mir der Ursache nicht sicher, aber ich vermute, weil der ApplicationController von rails-api von ActionController :: API erbt, was sich von ApplicationController von vanilla rails unterscheidet, der von ActionController :: Base erbt.
Tags und Links ruby-on-rails devise rails-api