我将允许预先生成的用户从 SilverStripe 4 网站前端页面注销,使用默认的 from。注销,因为登录有效。
问题是,如果登录的通用用户尝试通过单击Security/logout
(以及Security/logout?BackURL=home/
)之类的链接注销,它将被重定向到空白页面(仅显示页眉/页脚,因为默认Page.ss
已实现)。显然控制器不起作用或类似,因为 URL 只是指向我Security/logout
没有以下重定向。
因此,我尝试实现自定义身份验证器,就像我通常在 SS 3 中所做的那样,但我注意到了一些小的差异。然后,我按照官方文档和建议的示例寻求帮助。
这是这种情况:
MemberAuthenticator 自定义类 (在MySite/code中)
<?php
// Definizione Namespace
namespace Greylab\Corporate\Authenticator\UtenteAuthenticator;
use SilverStripe\Security\MemberAuthenticator\Authenticator;
/**
* Classe Autenticazione Utente
*/
class UtenteAuthenticator extends Authenticator
{
/**
* Login Paziente - Getter
* @param string $link URL di autenteicazione utente
* @return object Form di autenticazione utente
*/
public function getLoginHandler($link)
{
return UtenteLoginHandler::create($link, $this);
}
}
MemberAuthenticator\LoginHandler 自定义类 (在MySite/code中)
<?php
// Definizione Namespace
use SilverStripe\Security\MemberAuthenticator\LoginHandler;
use SilverStripe\Control\Session;
/**
* Clesse Login Utente
*/
class UtenteLoginHandler extends LoginHandler
{
/**
* Metodo gestione Login Utente
* Setter
* @param array $dati Dati form login
* @param object $form Form login
* @return void
*/
public function doLogin($dati, $form)
{
$utente = $this->checkLogin($dati);
// Controllo Utente
if ($utente) {
$cliente = Session::set('UtenteLoginHandler.MemberID', $utente->ID);
$datiCliente = Session::set('UtenteLoginHandler.Data', $dati);
$this->performLogin($cliente, $datiCliente);
return $this->redirectAfterSuccessfulLogin();
} else {
// Se utente invalido torna al form
return $this->redirectBack();
}
}
}
MemberAuthenticator\LoginHandler 自定义类 (在 _MySite/ config/mysite.yml 中)
SilverStripe\Core\Injector\Injector:
SilverStripe\Security\Security:
properties:
Authenticators:
UtenteAuthenticator: %$Greylab\Corporate\Authenticator\UtenteAuthenticator
有了这个实现,系统会抛出这个异常:
PHP 致命错误:在第 10 行的 /Applications/MAMP/htdocs/corporate/ss_corporate/corporate/code/UtenteAuthenticator.php 中找不到类“SilverStripe\Security\MemberAuthenticator\Authenticator”
任何人都可以建议我正确的方法吗?
提前感谢大家。