Silverstripe 4 - 未找到Authenticator类

时间:2018-05-18 08:27:18

标签: php silverstripe silverstripe-4

我允许预先生成的用户使用默认的from从SilverStripe 4网站前端页面注销。注销,因为登录有效。

问题在于,如果记录的通用用户尝试通过单击Security/logout(以及Security/logout?BackURL=home/)等链接进行注销,则会将其重定向到空白页面(仅使用标题/页脚可见,因为默认Page.ss已实现)。显然,控制器不起作用或类似,因为URL只指向Security/logout而没有后续重定向。

所以,我试图实现一个自定义身份验证器,就像我在SS 3中经常做的那样,但我注意到一些小差异。然后,我跟着official docsuggested example寻求帮助。

情况就是这样:

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'

任何人都可以建议我正确的方式吗?

提前感谢大家。

1 个答案:

答案 0 :(得分:1)

您可能需要使用

use SilverStripe\Security\MemberAuthenticator\CMSMemberAuthenticator

查看文档: http://api.silverstripe.org/4/SilverStripe/Security/MemberAuthenticator.html