2017-05-11 1 views
1

Ich habe eine Mitgliederseite. Ich möchte, dass der Inhalt nur sichtbar ist, wenn ein Benutzer angemeldet ist.

Ich überlegte, ob Seiteninhalte über den Admin ausgeblendet werden sollten. Jedoch möchte ich andere Formulare und Inhalte auf dieser Seite haben, wenn nicht angemeldet.

Ich habe überlegt mit dem memberprofiles Modul, aber ich möchte lernen, wie ich das selbst mache, damit ich ein besseres Verständnis von Controllern und Silverstripe Sicherheit.

Derzeit sieht die Vorlage wie folgt aus:

<% if CurrentMember %> 
    LOGGED IN 
<% else %> 
    You must login to proceed: 
    $LoginForm 
<% end_if%> 

Wenn nicht angemeldet, ich $ Loginform nenne.

Wenn ich Details falsch eingegeben habe, leitet das Formular mich zu "Seite nicht gefunden". Ich habe das Anmeldeformular nicht erweitert oder geändert.

Mitglied Seite URL, wenn Seite nicht gefunden:

localhost:8888/site-name/members/login#MemberLoginForm_LoginForm_tab

nicht sicher, warum die Seite nicht zu Sicherheit/Login wird umgeleitet wird.

Das gewünschte Ergebnis:

  • Wenn ein Benutzer Daten korrekt eingibt, leitet es automatisch auf die aktuelle Seite, aber jetzt ist der Inhalt sichtbar

  • Wenn ein Benutzer Detail geht es falsch, Leitet zurück zum Login-Formular und zeigt den entsprechenden Fehler an.

Antwort

3

Das Problem ist in MemberLoginForm Linie 177:

// Show the right tab on failed login 
    $loginLink = Director::absoluteURL($this->controller->Link('login')); 

Es möchte, dass Sie die login/ Aktion des Stromreglers senden (die ContentController::LoginForm() Pässe zu ihm). Ich bin mir ziemlich sicher, dass das ein Feature ist, kein Bug, denn wenn Sie das Anmeldeformular außerhalb von Security verwenden, möchten Sie den Benutzer wahrscheinlich lieber in diesem Abschnitt belassen, anstatt ihn auf eine separate Vorlage zu verschieben.

In jedem Fall ist die einfachste Lösung nur login als $allowed_action auf dem Controller hinzuzufügen, der das Formular zeigt.

class MyPage_Controller extends Page_Controller 
{ 
    private static $allowed_actions = ['login']; 
} 

Wenn Sie auf jeder Seite die Form sind Anzeigen, dann fügen Sie einfach diese Aktion Page_Controller, so dass alle Erben es der weißen Liste haben.

+0

Ausgezeichnet. Das hat perfekt funktioniert. Danke für die Erklärung. – Dallby

Verwandte Themen