Ermöglicht Administratoren, Benutzer mit Devise hinzuzufügen

8

Ich versuche es so zu machen, dass nur Admins Anwendungen mit Devise hinzufügen können. Ich habe es meistens bekommen aber jetzt arbeiten, wenn ich als Admin angemeldet und senden Sie das Formular anmelden es schlägt mich wieder mit dem Fehler: You are already signed in.

Ich habe versucht, die Anweisungen hier zu folgen. Ссылка aber es scheint nicht, diese Situation zu erwähnen

Muss ich in editors_controller noch etwas überschreiben, um dies zu ermöglichen?

Hier sind meine Routen ("Editoren" ist der Name meines Benutzermodells):

%Vor%

und mein editors_controller in "app / controllers /"

%Vor%

BEARBEITEN Ich habe dieses Processing by Devise::RegistrationsController#create as HTML in den Protokollen bemerkt, als ich das Formular absende. Ich hatte vermutet, dass vielleicht das skip_before_filter :require_no_authentication wurde nicht genannt zu werden, aber davon ausgegangen, dass, weil das EditorsController aus wurde vererben RegistrationController , dass vor Filter würde funktionieren. Ist das nicht der Fall?

    
Eric Norcross 26.09.2013, 01:43
quelle

3 Antworten

6

Sie sollten Ihre eigene Methode create für EditorsController implementieren, anstatt diese Aktion von Devise::RegistrationsController zu erben. Wie Sie sehen, überprüft die Methode in Devise::RegistrationsController zuerst, ob Sie bereits eingeloggt sind, und kickt Sie zurück, wenn Sie es sind. Wenn Sie nicht angemeldet sind, wird ein User -Konto erstellt und Sie als dieser Benutzer angemeldet.

Sie versuchen, dieses Problem mit skip_before_filter :require_no_authentication zu umgehen, aber Ihr Formular ist wahrscheinlich POST in /editors anstatt /admin/editors . Sie müssen also eine Route hinzufügen, mit der Sie create für EditorsController :

erreichen können %Vor%

Dann möchten Sie eine verkleinerte Version von create implementieren. Wahrscheinlich möchtest du etwas ähnliches:

%Vor%

Sie sollten auch sicherstellen, dass die Vorlage admin/editors/new das Formular auf die richtige Route verweist ( 'admin/editors' ).

    
Jeremy Green 26.09.2013, 02:20
quelle
1

Keine der googlefähigen Lösungen funktionierte, als ich sie ausprobierte. Das funktioniert

Was ich getan habe, war, eine neue Aktion im Controller und eine neue Route dafür zu erstellen und die Links in meinen Ansichten zu verbinden, die normalerweise eine Verbindung herstellen, um jetzt meine Route und Aktion aufzurufen.

Aber das war nicht genug. Da Devise zuhört und alle hinzugefügten Dateien anpackt, versuchen Sie es zu tun und validieren es durch seinen eigenen Code. Also füge ich einfach den neuen Benutzerdatensatz mit einer SQL-Einfügung hinzu.

Fügen Sie diese Route hinzu

%Vor%

Fügen Sie diese Aktion dem Benutzercontroller hinzu:

%Vor%

Anzeigen: new.html.erb ändere das form_for, damit submit zur neuen route und aktion geht, nicht zum standard Rails.

%Vor%     
Richard Grossman 28.12.2016 05:04
quelle
0
___ answer41355642 ___

Keine der googlefähigen Lösungen funktionierte, als ich sie ausprobierte. Das funktioniert

Was ich getan habe, war, eine neue Aktion im Controller und eine neue Route dafür zu erstellen und die Links in meinen Ansichten zu verbinden, die normalerweise eine Verbindung herstellen, um jetzt meine Route und Aktion aufzurufen.

Aber das war nicht genug. Da Devise zuhört und alle hinzugefügten Dateien anpackt, versuchen Sie es zu tun und validieren es durch seinen eigenen Code. Also füge ich einfach den neuen Benutzerdatensatz mit einer SQL-Einfügung hinzu.

Fügen Sie diese Route hinzu

%Vor%

Fügen Sie diese Aktion dem Benutzercontroller hinzu:

%Vor%

Anzeigen: new.html.erb ändere das form_for, damit submit zur neuen route und aktion geht, nicht zum standard Rails.

%Vor%     
___ qstnhdr ___ Ermöglicht Administratoren, Benutzer mit Devise hinzuzufügen ___ answer19018281 ___

Sie sollten Ihre eigene Methode :validate_admin für before_action implementieren, anstatt diese Aktion von :index zu erben. Wie Sie sehen, überprüft die Methode in after_create zuerst, ob Sie bereits eingeloggt sind, und kickt Sie zurück, wenn Sie es sind. Wenn Sie nicht angemeldet sind, wird ein %code% -Konto erstellt und Sie als dieser Benutzer angemeldet.

Sie versuchen, dieses Problem mit %code% zu umgehen, aber Ihr Formular ist wahrscheinlich %code% in %code% anstatt %code% . Sie müssen also eine Route hinzufügen, mit der Sie %code% für %code% :

erreichen können %Vor%

Dann möchten Sie eine verkleinerte Version von %code% implementieren. Wahrscheinlich möchtest du etwas ähnliches:

%Vor%

Sie sollten auch sicherstellen, dass die Vorlage %code% das Formular auf die richtige Route verweist ( %code% ).

    
___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungsframework, das in Ruby geschrieben wurde. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___ tag123devise ___ Devise ist ein Authentifizierungs-Juwel für Ruby-on-Rails. Es ersetzt frühere Lösungen wie Restful Authentication oder Authlogic. ___ qstntxt ___

Ich versuche es so zu machen, dass nur Admins Anwendungen mit Devise hinzufügen können. Ich habe es meistens bekommen aber jetzt arbeiten, wenn ich als Admin angemeldet und senden Sie das Formular anmelden es schlägt mich wieder mit dem Fehler: %code%

Ich habe versucht, die Anweisungen hier zu folgen. Ссылка aber es scheint nicht, diese Situation zu erwähnen

Muss ich in %code% noch etwas überschreiben, um dies zu ermöglichen?

Hier sind meine Routen ("Editoren" ist der Name meines Benutzermodells):

%Vor%

und mein %code% in "app / controllers /"

%Vor%

BEARBEITEN Ich habe dieses %code% in den Protokollen bemerkt, als ich das Formular absende. Ich hatte vermutet, dass vielleicht das %code% wurde nicht genannt zu werden, aber davon ausgegangen, dass, weil das %code% aus wurde vererben %code% , dass vor Filter würde funktionieren. Ist das nicht der Fall?

    
___ answer4952578 ___

Hier wird Rails 4.2.6 verwendet (mein Modell ist User statt Editor). Die folgende Lösung umgeht (glaube ich) jegliche Geräteaktionen, die die neue Benutzererstellung durch den Administrator beeinträchtigen könnten:

Fügen Sie diese Aktion dem Benutzer-Controller hinzu:

%Vor%

Fügen Sie diese private Methode dem Benutzer-Controller hinzu, falls sie nicht existiert:

%Vor%

Fügen Sie dies config / routes.rb hinzu:

%Vor%

Fügen Sie diese Klassenmethode dem Benutzermodell hinzu:

%Vor%

Ich habe keine separate Admin-Klasse in meiner Anwendung. Stattdessen habe ich ein Admin-Attribut für Benutzer definiert und überprüfe es mit einem %code% %code% -Filter im UsersController.

Ich wollte in der %code% -Ansicht einen neuen Benutzer erstellen können, also habe ich eine Schaltfläche hinzugefügt:

%Vor%

Sie müssen möglicherweise die obige Lösung optimieren, wenn Sie im Benutzermodell %code% -Aktionen haben (z. B. Senden einer Willkommens-E-Mail).

    
___
guero64 06.07.2017 15:01
quelle

Tags und Links