【问题标题】:Silverstripe 4 - Authenticator class not foundSilverstripe 4 - 未找到身份验证器类
【发布时间】:2018-10-28 15:18:14
【问题描述】:

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

问题在于,如果登录的通用用户尝试通过单击Security/logout(以及Security/logout?BackURL=home/)之类的链接注销,它会被重定向到空白页面(仅显示页眉/页脚,如默认Page.ss 已实现)。显然控制器不起作用或类似,因为 URL 仅将我指向 Security/logout 而没有以下重定向。

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

情况是这样的:

MemberAuthenticator 自定义类 (在MySite/代码中)

<?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/代码中)

<?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”

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

提前感谢大家。

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    您可能需要使用

    use SilverStripe\Security\MemberAuthenticator\CMSMemberAuthenticator
    

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

    【讨论】:

    • 感谢@gavin,我更改了依赖项并更正了扩展语句。现在异常已解决,但我仍然卡在空白页问题上。我提出了一个关于它的新问题。可以在这里找到:stackoverflow.com/questions/50444572/…
    猜你喜欢
    • 2017-06-14
    • 2021-09-21
    • 1970-01-01
    • 2014-03-06
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2013-06-11
    相关资源
    最近更新 更多