ProcessWire - passwortgeschützter Bereich
https://processwire.com/talk/topic/107-custom-login/
Es gibt Module dafür, aber man kann auch mit Bordmitteln gut arbeiten und ist evtl. flexibler.
Je nachdem was man möchte sind unterschiedliche Ansätze sinnvoll.
- Seiten schützen
- Teile von Seiten schützen
- Was soll passieren wenn man eine geschützte Seite ohne Anmeldung aufruft (Login Form, Redirect...)
- Login im Seitentemplate oder als Inhaltselement
- ...
Strategie[Bearbeiten]
User: Um eine Seite zu schützen kann man die Anmeldung eines Users abfragen. Im einfachsten Fall kann man einen User mit der Gruppe "guest" anlegen und den Link Teilen.
Login: Ein Frontendformular ist hier schicker als das BE Formular. Zusätzlich oder auch alleine kann man z.b. das PageProtector Modul nehmen.
Seite nur angemeldeten Usern zeigen: Dazu kann man in der Templateausgabe einfach abfragen ob ein User angemeldet ist und ansonsten nichts ausgeben.
Dateien: Zu überlegen ist ob man den direkten Download noch unterbinden möchte. Stichwort Protected Files. Das ist in ProcessWire von Haus aus möglich.
Beispiel[Bearbeiten]
Beispiel Login / Logoutformular als Layout Block mit Redirect
<?php namespace ProcessWire;
/**
* fe-login.php provides a login form
*/
$sectionClasses = 'uk-section fe-login';
$forPage = getForPage($page); // parent page of the repeater matrix
$loginForm = '
<form action="./" method="post">
<div class="login uk-grid uk-child-width-1-3@s" uk-grid>
<p><input class="uk-input" type="text" id="user" name="user" placeholder="Benutzername"/></p>
<p><input class="uk-input" type="password" id="pass" name="pass" placeholder="Passwort" /></p>
<p><input class="uk-input uk-button uk-button-primary" type="submit" name="submit" value="Login" /></p>
</div>
</form>
';
$logoutForm = '
<div class="login logout">
<p>Angemeldet als '.$user->name.'</p>
<p><a class="uk-button uk-button-primary" href="?logout=1">Abmelden</a></p>
</div>
';
$out = '';
if($page->link){
// Redirect available
try {
$linkPage = $pages->get($page->link);
} catch (\Throwable $th) {
//throw $th;
$linkPage = $forPage->path;
}
}else{
$linkPage = $forPage->path;
}
// JUST CLICKED LOGGED OUT > LOGOUT & RELOAD PAGE
if($input->get->logout == 1) {
$session->logout();
$session->redirect($forPage->path);
}
// NOT LOGGED IN
if(!$user->isLoggedin()){
// FRESH LOGIN > check credentials
if($input->post->user && $input->post->pass) {
$user = $sanitizer->username($input->post->user);
$pass = $input->post->pass;
if($session->login($user, $pass)) {
// LOGIN SUCCESS
$session->redirect($linkPage->path);
} else {
// LOGIN FAILED
$out .= '<p class="uk-alert">Anmeldung ungültig.</p>';
}
} else {
// PRESENT LOGIN FORM
$out .= $loginForm;
}
} else {
// LOGGED IN > SHOW LOGOUT FORM
$out .= $logoutForm;
}
$sectionClasses = 'fe-login';
$out = '<div class="uk-container">'.$out.'</div>';
//bd($forPage->loginForm,'forPage loginform');
$out = renderSection($page,$out,$sectionClasses);
return $out;