2012-03-29 7 views
0

Ich habe eine Anwendung, bei der ein Benutzer andere Benutzer, die mit demselben Konto verbunden sind, zerstören kann.So verhindern Sie das automatische Abmelden bei der Zerstörung eines Benutzers

Ich benutze Devise für die Authentifizierung und möchte in der Lage sein, einem Benutzer zu erlauben, andere Benutzer zu zerstören. Ich habe dieses Bit, das funktioniert, aber ich bemühe mich, zu verhindern, dass mich die Devise abmeldet, obwohl ich einen anderen Benutzer lösche.

Ich habe meine eigene registrations_controller erstellt:

class RegistrationsController < Devise::RegistrationsController 
    def new 
    super 
    end 

    def create 
    super 
    end 

    def edit 
    ... 
    super 
    end 

    def update 
    ... 
    end 

    def destroy 
    resource.destroy 
    set_flash_message :notice, :destroyed 
    redirect_to :root 
    end 

end 

und die Verbindung, die jeder meiner Benutzer zerstört wie folgt aussieht:

<%= link_to "Yes", registration_path(@user), :remote => true, :method => :delete, :class => "button" %>

Allerdings habe ich jedes Mal auf diesen Link klicken, um es Meldet mich ab, obwohl es ein anderer Benutzer ist, den ich lösche.

Irgendwelche Ideen?

+0

Sind Sie sicher, dass Sie den Benutzer nicht angemeldet sind zu zerstören? Sieht so aus. Außerdem müssen Sie nicht alle diese Aktionen mit der Super-Linie haben. – Ashitaka

Antwort

0

Für alle anderen, die dieses Problem haben, löste ich dies über diesen Beitrag. Grundsätzlich kann Device keinen anderen Benutzer löschen als den aktuellen. Sie müssen eine Aktion hinzufügen zerstören Benutzer zu Ihren anderen Controller zu zerstören, die die aktuelle Ansicht angezeigt wird:

Destroying users as an admin in Devise

0

Ich hatte das gleiche genaue Problem und erkannte, dass es nicht Devise war, das das Problem war. Fügen Sie das zu Ihrem Layout hinzu:

<%= csrf_meta_tag %> 

Rails erwartet, dass Sie den CSRF-Authentifizierungscode mit jeder Antwort haben. Rails ignorieren nur eine GET-Anfrage ohne eine, aber wenn Sie sie nicht in eine POST/PUT/DELETE-Anfrage aufnehmen, wird die aktuelle Sitzung stillschweigend beendet, die Sie abmeldet.

Bei Verwendung des form_for Helpers wird der CSRF-Code automatisch eingefügt. Der JavaScript-AJAX-Helfer Rails (der für Remotelinks zuständig ist) sucht jedoch nach dem CSRF-Metatag, damit der Code an die Anforderung angehängt werden kann.

+0

Carbo, danke aber ich habe das schon im Header. Für jeden, der auf diesen Beitrag stieß, lösten sich meine Probleme. Im Grunde genommen kann Devise keinen anderen Benutzer außer dem aktuellen Benutzer löschen: http://stackoverflow.com/questions/5170518/destroying-users-as-an-admin-in-devise –

Verwandte Themen