2016-08-19 5 views
0

Ich fühle mich wie die Antwort ist "es ist eingebaut, Dummy", aber ich kann die Dokumentation nicht finden, um meinen Verdacht zu überprüfen.Sichere Admin-Registrierung mit Devise

Ich benutze Devise für eine Rails App und meine Frage, kurz gesagt, ist: "Wie erstelle ich neue Admin-Benutzer?" Der Grund, warum ich frage, ist, dass nach der Devise-Dokumentation scheinbar nur eine Struktur erstellt wird, die die URL/admins/sign_up offen legt, ähnlich wie sie die URL/users/sign_up für neue Benutzer verfügbar macht.

Jetzt, allgemein, würde ich nicht erwarten, dass jemand zu/admins/sign_up gehen, nur um zu sehen, ob sie könnten. Aber ich möchte nicht wirklich darauf bauen und eine (ziemlich klaffende) Schwachstelle schaffen. Meine Follow-up-Frage lautet also: "Wie kann ich die Admin-Anmeldung sichern, so dass nur die richtigen Leute sie sehen?" und/oder "Was ist eine bessere Alternative, um Admin Accounts mit Devices zu verwalten?"

EDIT 1
I (in their docs) die offensichtliche Antwort auf die Sicherung der Admin anmelden entdeckt gefunden. Wenn ich :registerable und einige andere Konfigurationsoptionen im Admin-Modell entferne und die Migration mit den entsprechenden Einstellungen ausführe, ist die Route einfach nicht verfügbar, um eine Art Admin-Anmeldung zu erreichen. Groß.

Ich denke meine erste Frage steht jetzt noch: "Wie erstelle ich jetzt einen neuen Admin?" Es ist nicht so, als ob irgendjemand jetzt reingehen und sich als Admin anmelden könnte, aber ich sehe auch nicht, wie ich oder jemand anderes ein Admin-Konto erstellen könnte.

+1

Öffnen Sie einfach eine Rails-Konsole und erstellen Sie Ihren Admin-Benutzer. –

+0

@SergioTulentsev Das ist angemessen? Ich hatte darüber nachgedacht, aber es scheint eine Schwachstelle zu sein, die andere ebenfalls ausnutzen könnten. – DanielNordby

+0

Wie erhalten andere Zugriff auf Ihre Rails-Konsole? –

Antwort

1

Devise ist ein großes Juwel für die Authentifizierung, aber es fehlen einige der wichtigsten Funktionen wie Sie nur für die Erstellung von Benutzern admin wollte. Es ist ziemlich allgemeine Zweckbestimmung für viele Projekte.

Es gibt keine Lösung für dieses Problem.

Hier sind einige Dinge, die sich vorstellen/annehmen.

  1. Anmelden ist öffentlich
  2. Bereits anmelden Benutzer nicht
  3. Neu unterzeichnet anmelden können Sie Benutzer Auto wird nach erfolgreicher Registrierung angemeldet.

Jetzt werden wir alle der oben genannten drei Verhalten für Benutzer user

Ich gehe davon aus das Modell ändern ist und die Konfiguration ersinnen für user

Zunächst einmal müssen Sie devise Registrierungscontroller außer Kraft setzen .

## app/controllers/registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 
    before_action :authenticate_user!, :redirect_unless_admin, only: [:new, :create] 
    skip_before_action :require_no_authentication 

    private 
    def redirect_unless_admin 
    unless current_user.try(:admin?) 
     flash[:error] = "Only admins can do that" 
     redirect_to root_path 
    end 
    end 

    def sign_up(resource_name, resource) 
    true 
    end 
end 


# config/routes.rb 
Rails.application.routes.draw do 
    devise_for :users, :controllers => { :registrations => 'registrations'} 
end 

Hier ist, wie alle der oben genannten drei Probleme behandelt werden.

  1. Die before_action stellt sicher, dass ein Benutzer angemeldet ist, und leitet sie um, es sei denn, sie sind Admin, wenn sie versuchen, sich anzumelden.
  2. Das bereits angemeldete Problem wird durch die Methode require_no_authentication von Devise verursacht und überspringt das Problem.
  3. Als nächstes wird der neu erstellte Benutzer automatisch angemeldet. Die Hilfsmethode, die dies tut, wird außer Kraft gesetzt, um die automatische Anmeldung zu verhindern.
+0

Ich folge etwa 98% von dem, was Sie sagen, und es macht Sinn. Ich denke, dass es mein Problem nicht ganz anspricht ... Ich versuche, Admin-Benutzer zu machen, nicht Admins andere Benutzer zu erstellen. Das heißt, ich kann nicht versprechen, dass ich nicht einige der cleveren Dinge verwenden, die Sie darauf hingewiesen haben. Vielen Dank! – DanielNordby

+0

Sie brauchen nur einmal Admin-Benutzer oder Admin-Benutzer können andere Admin-Benutzer erstellen? –

+0

AH ... jetzt sehe ich, wohin du damit gehst. Ich denke, dass die letzten 2% von dem, was ich vermisst habe, in mein Gehirn geklickt haben. Danke für das Ausfüllen der Lücke! Natürlich kann ich, sobald ich einen Administrator-Benutzer gemäß Sergios Vorschlag oben festgelegt habe, Ihren Code implementieren, damit dieser Administrator andere Administratoren erstellen kann (was sicherlich eine zukünftige Anforderung sein wird). Perfekt! – DanielNordby