2012-06-30 11 views
5

Ich habe es geschafft, JSON-Authentifizierung einzurichten. Ich implementiert den folgenden Code:Devise Ausfallauthentifizierung über JSON sendet HTML zurück anstelle von JSON

class Users:: SessionsController < Devise::SessionsController 
    def create 
    respond_to do |format| 
     format.html { super } 
     format.json { 
     warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure") 
     render :json => {:success => true} 
     } 
    end 
    end 

    def destroy 
    respond_to do |format| 
     format.html {super} 
     format.json { 
     Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name) 
     render :json => {} 
     } 
    end 
    end 

    def failure 
    render :json => {:success => false, :errors => ["Login Failed"]} 
    end 
end 

Dies funktioniert gut, aber wenn die Authentifizierung fehlschlägt, tut das Versäumnis, die json Versagen zurück. Ich habe einen benutzerdefinierten Fehler für die Entwicklung. Wenn ich die redirect_url entferne oder den Kundenfehler vollständig lösche, gibt die Authentifizierung einen json mit der Fehlermeldung zurück. Mein individuelles Versagen ist wie folgt:

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope 
    '/' 
    end 

    # You need to override respond to eliminate recall 
    def respond 
    if http_auth? 
     http_auth 
    else 
    redirect 
    end 
end 

Ende

Wie auch immer die Umleitung Wenn es eine HTML-Anfrage zu halten und eine json mit einem Fehler msg wenn sie ein json Anfrag zurückgeben?

Danke!

Antwort

5

Sie müssen Warden sagen, diesen benutzerdefinierten Fehler zu verwenden.

Verwandte Themen