2016-04-06 6 views
-2

Ich habe eine Rails-Anwendung und ein einfaches Login-Skript geschrieben.Rails Benutzer Login, nur Garant Zugriff auf Seiten

Die Anmeldung überprüft, ob das eingegebene Passwort mit dem Hash-Wert in der Datenbank übereinstimmt.

Dann speichere ich die Benutzer-ID in Sitzung.

Jetzt möchte ich, dass die Seiten nur vissible sind oder nur Zugriff, wenn ein Benutzer in ist loged ..

Wie kann ich dies tun erreichen?

Dank für Hilfe

+0

Warum ist es nach unten gestimmt? – Felix

Antwort

5

Zunächst einmal, ich würde das nicht selbst tun, wenn Edelsteine ​​wie Devise, dass in der Angelegenheit von Minuten für mich tun können.

Obwohl, wenn Sie das wirklich selbst wollen tun, ich eine user_logged_in! Methode in Ihrer ApplicationController tun würde, die vor jeder Aktion aufgerufen werden würde (Sie können wählen, welche Aktion mit before_action geprüft werden soll):

class ApplicationController < BaseController 
    before_action :user_logged_in! 

    protected 

    def user_logged_in! 
    # Logic that checks if the user is actually logged in (check in session, etc). 

    # If not logged in, redirect the user to the root page with a flash message. 
    end 
end 

Für die Aktionen/Controller, auf denen der Benutzer nicht authentifiziert werden muss, können Sie skip_before_action verwenden:

class DomainsController < BaseController 
    skip_before_action :user_logged_in!, only: [:index, :show] 
end 
+0

Ja, aber das ist nicht die Lösung. wenn ich nicht eingeloggt bin, kann ich domain/users/edit ... anrufen, aber das sollte nur möglich sein, nachdem ein Benutzer angemeldet ist .. – Felix

+1

Absolut. Dann könnten Sie beispielsweise in Ihrem 'domains_controller' diese Validierung überspringen, indem Sie' skip_before_action' verwenden. Ich werde meine Antwort bearbeiten, um das klarer zu machen. – born4new

+0

und danke für den Hinweis mit Gerät. Ich kannte den Edelstein. Aber ich brauche nur minimale Funktion und ich möchte es "von mir selbst" machen;) – Felix

Verwandte Themen