Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TYPO3 Neos:包的身份验证提供程序_Typo3_Typo3 Flow_Neoscms - Fatal编程技术网

TYPO3 Neos:包的身份验证提供程序

TYPO3 Neos:包的身份验证提供程序,typo3,typo3-flow,neoscms,Typo3,Typo3 Flow,Neoscms,有很多例子可以通过登录设置身份验证提供程序,但我找不到如何为包设置身份验证提供程序的例子 类型3近地天体v1.2.x 我有一个后端编辑器包。编辑器应该通过控制器进行通信。到目前为止一切正常,但我现在无法访问控制器。如果我看一下TYPO3 Neos package Settings.yaml,有一个选项controllerObjectName Typo3BackendProvider: provider: 'PersistedUsernamePasswordProvid

有很多例子可以通过登录设置身份验证提供程序,但我找不到如何为包设置身份验证提供程序的例子

类型3近地天体v1.2.x

我有一个后端编辑器包。编辑器应该通过控制器进行通信。到目前为止一切正常,但我现在无法访问控制器。如果我看一下TYPO3 Neos package Settings.yaml,有一个选项
controllerObjectName

      Typo3BackendProvider:
        provider: 'PersistedUsernamePasswordProvider'
        requestPatterns:
          controllerObjectName: 'TYPO3\Neos\Controller\.*|TYPO3\Neos\Service\.*|TYPO3\Media\Controller\.*'
        entryPoint: 'WebRedirect'
        entryPointOptions:
          routeValues:
            '@package':    'TYPO3.Neos'
            '@controller': 'Login'
            '@action':     'index'
            '@format':     'html'
如果我将我的控制器也添加到此选项中,则它可以工作:

          controllerObjectName: 'TYPO3\Neos\Controller\.*|TYPO3\Neos\Service\.*|TYPO3\Media\Controller\.*|Vendor\Package\Controller\Backend\.*'
但我无法想象,答案是覆盖近地天体的设置

因此,我尝试添加一个具有相同设置的自己的提供者
Typo3BackendProvider

      VendorPackageProvider:
        provider: 'PersistedUsernamePasswordProvider'
        requestPatterns:
          controllerObjectName: 'Vendor\Package\Controller\Backend\.*'
        entryPoint: 'WebRedirect'
        entryPointOptions:
          routeValues:
            '@package':    'TYPO3.Neos'
            '@controller': 'Login'
            '@action':     'index'
            '@format':     'html'
因为这不起作用,我尝试使用,并在
Typo3BackendProvider
VendorPackageProvider
中用相同的名称定义了它。不管用

日志也没有帮助:

14-12-25 17:52:25 66198      127.0.0.1      INFO      Flow                 Session 52exQd3r1orQA35gTfjQZhhOae4x5SVh contains auth token TYPO3\Flow\Security\Authentication\Token\UsernamePassword for provider VendorPackageProvider. Status: no credentials given
14-12-25 17:52:25 66198      127.0.0.1      INFO      Flow                 Access denied (0 denied, 0 granted, 1 abstained) to method Vendor\Package\Controller\Backend\MyController::indexAction().
14-12-25 17:52:25 66198      127.0.0.1      INFO      Flow                 Redirecting to authentication entry point
    routeValues => array (
       @package => TYPO3.Neos
       @controller => Login
       @action => index
       @format => html
    )
至少是我的政策。yaml:

resources:
  methods:
    Vendor_Package_BackendAccess: 'method(Vendor\Package\Controller\Backend\MyController->(initalize|index)Action())'

acls:
  'TYPO3.Neos:Editor':
    methods:
      Vendor_Package_BackendAccess: GRANT

对于任何想在Flow Framework/Neos身份验证提供程序中了解这一点的人

可以避免覆盖Neos主包设置的提供程序,并添加您自己的提供程序,但它不干净,存在严重缺陷

诀窍是添加另一个具有相同名称但大小写不同的提供程序。例如,这里有
Typo3BackendProvider
,因此您可以用
Typo3BackendProvider
(全部小写,但您可以随意上下更改一个字母)。在这个提供者条目中,您设置了相同的providerclass和requestpattern,在控制器上为入口点设置了一个小重叠。技巧的第二部分是将
authenticationStrategy
设置为
atLeastOneToken

因此,在包的Settings.yaml中:

providers:
  authenticationStrategy: atLeastOneToken
  typo3backendprovider:
    provider: 'PersistedUsernamePasswordProvider'
    requestPatterns:
      controllerObjectName: 'TYPO3\Neos\Controller\LoginController\?.*|Vendor\Package\Controller\Backend\.*'
(您的包必须位于PackageStates.php或composer.json中的Neos包后面,或者必须将其置于全局配置中)

现在在登录时,流身份验证框架将找到两个活动的身份验证提供程序,并使用相同的凭据对它们进行身份验证。当它在Neos后端控制器中时,它会找到一个经过身份验证的令牌,在您的后端控制器中,它也会找到一个经过身份验证的令牌。注销时,authenticationmanager将使用两个令牌销毁会话,即使技术上仅注销一个令牌或另一个令牌

这种技巧的明显缺点是,对于查询配置并看到两个非常相似的身份验证提供程序的人来说,有点模糊。此外,在登录时,哈希时间会加倍,因为它会被检查两次,因此这对于将其后端空间组合在一起的多个包来说是不可伸缩的。最后,
atLeastOneToken
策略可能会导致意外的多因素身份验证效果,如果其他提供商在此之前进行了身份验证并继续进行

最好让它全球化 鉴于这些缺点,我认为覆盖默认提供程序的controllerObjectName并不是一件坏事。这实际上意味着
Typo3BackendProvider
管理该精确区域的身份验证令牌。它应该在全局
配置/设置.yaml中设置,而不是在包本身中设置,以避免多个包定义controllerObjectName时出现问题,只保留最后一个。在软件包的设置中,您也可以对其进行设置,这样,如果您忘记了全局配置,它将使正常后端明显无法工作。

早上好,尽管您的问题已经提出一年了-您找到解决问题的方法了吗?我现在也在同一点上。嗨!我放弃了近地天体:(继续使用TYPO3 CMS。别理解我的错误,这是一个很好的概念,但有一些小问题我无法向客户解释。从后端的视口或在编辑器中设置链接开始。嗨!谢谢你的快速响应。我也使用平行TYPO3。但我认为Neos是一个很好的系统,尤其是基本fl对我来说,投入大量的时间和精力是值得的。我认为这是向近地天体提问的最好地方!