2016-04-07 5 views
0
class RegistrationsController < Devise::RegistrationsController 

    def create 
    super 
    if resource.save 
     if request.fullpath == '/techie/signup' 
     resource.role = :techie 
     resource.save 
     end 
    end 
    end 

end 

Ich habe dies die devise Controller überschreibt, und ich habe eine separate Anmelde Ansicht mit einem Pfad von ‚/ Techie/Anmeldungen /‘ und ich möchte eine Rolle für den Benutzer hinzuzufügen, basierend auf die Seite, auf der sie sich angemeldet haben. Ich möchte die Rolle nicht in ein verstecktes Feld stecken, da dieses Zeug ausgenutzt werden kann.was mache ich hier falsch? Anmeldung mit devise und das Hinzufügen einer Rolle

Danke

+0

haben Sie versucht, einen Haltepunkt in Ihren Code zu setzen, um zu sehen, wie weit die Daten reichen? – SomeSchmo

Antwort

1

Versuchen Sie diese.

def create 
    super do |res| 
     if request.path_info == '/techie/signup' 
     res.role = :techie 
     res.save! 
     end 
    end 
    end 
+0

eine undefinierte Methode bekommen 'fullpath 'Raten müsste die Helfer in das Modell einschließen aber bricht MVC nicht? –

+0

@SaraAl lassen Sie mich auf meinem Test, ich bin nicht sicher, dass 'res' Objekt bietet Fullpath. – 7urkm3n

+0

danke! Ich habe nicht wirklich viel anderes gefunden, als Leute, die die Rolle basierend auf einem versteckten Feld editieren und nicht denken, dass es das Beste für die Sicherheit ist. Einfach auf den URL-Pfad setzen. –

1

Anstelle der Verwendung von request.full_path oder request.path_info, mit

URI(request.referer).path 

es gelöst.

+1

nice, aber was genau liefert diese 'URI (request.referer) .path'? – 7urkm3n

+0

@ 7urkm3n gibt '/ techie/signup' auf der create-Methode des Registrierungs-Controllers zurück. Stellt sich heraus, greifen den aktuellen Pfad nicht korrelieren mit der Schaffung Aktion der Registrierung bedeutet eigentlich nicht immer noch "/ Technikfreak/Anmeldung" ist der aktuelle Pfad. Es war der vorherige Pfad und request.referer ergreift die letzte Seite. –