Rails api gem und Token-Authentifizierung entwickeln

9

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.

%Vor%

sessions_controller.rb

%Vor%

registrations_controller.rb

%Vor%

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!

Controller %Vor%

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

verwendet

UPDATE Es scheint das Problem ist mit meinem routes.rb selbst - So werden die Routen gemacht.

%Vor%

Wenn nun devise_for :users außerhalb des Bereichs wiederholt wird, hat alles funktioniert.

%Vor%

Hat jemand eine Erklärung warum?

    
randika 03.06.2013, 16:02
quelle

3 Antworten

6

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:

%Vor%

Schritt 5. Aktivieren Sie token_authenticatable im Entwicklungsmodell und fügen Sie config/initializers/devise.rb

hinzu %Vor%

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.

    
Emil 16.08.2013 08:05
quelle
1

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.

    
Aaron Gray 19.08.2015 23:34
quelle
-4

Es sieht so aus, als ob Ihr Devise-Modell nicht Benutzer ist. Devise generiert die Authentifizierung _ # {Modellname}! Funktion basierend auf dem Benutzer / Person / Admin / etc Modell.

    
ruckc 28.07.2013 19:09
quelle

Tags und Links