networkteam / neos-frontendlogin
用于构建具有前端登录的成员区域的Neos包
Requires
- neos/fusion-afx: *
- neos/neos: ~8.0
Suggests
- networkteam/neos-passwordreset: Allow users to reset their user account password within the frontend.
README
受Flowpack.Neos.FrontendLogin启发的Neos前端登录包。它为MemberAreaRootPages提供mixin。该包利用了NodeInterface的accessRoles属性。
注意:当前Neos版本neos/neos:7.*和neos/neos:8.*似乎与此包兼容,因为已弃用的部分尚未删除。但请注意,未来可能会有破坏性变更。
功能
- 在页面树中放置一个MemberAreaRootPage,包括成员区域页面本身在内的所有页面都将受到保护
- 配置登录和登出后的重定向页面
- 当请求受保护的页面且没有有效登录时,将重定向到配置的登录表单。登录成功后,将重定向到最初请求的页面(引用者)。
- 可能存在具有不同访问角色的多个成员区域
安装
通过composer安装此包
composer require networkteam/neos-frontendlogin
与neos/neos包的兼容性
迁移
此包提供了一个节点迁移,用于将现有的内部accessRoles值复制到常规节点属性。
./flow node:migrate 20210419111000 --confirmation true
节点类型
Networkteam.Neos.FrontendLogin:Mixins.MemberAreaRoot
该mixin Networkteam.Neos.FrontendLogin:Mixins.MemberAreaRoot定义了特定成员区域的根点,其类型为Neos.NodeTypes:Page
通过角色进行身份验证
此包使用neos flow安全框架。有关更多详细信息,您可以查看flow框架文档。
提供了两个角色定义
- Networkteam.Neos.FrontendLogin:MemberArea (抽象的):MemberArea角色的接口。它用于MemberAreaRootPages的访问角色选择。
- Networkteam.Neos.FrontendLogin:FrontendUser:具体的访问角色实现
您可以通过将它们添加到包的Policy.yaml中来定义自己的前端用户角色。请确保添加Networkteam.Neos.FrontendLogin:MemberArea作为父角色。否则,您将无法在MemberAreaRootPage节点中选择该角色。
当您通过检查器在MemberAreaRootPage上设置访问角色并应用更改时,这些访问角色也将设置在该MemberAreaRootPage下方的所有DocumentNodes上。这确保了所有这些页面只能由具有所选角色的用户访问。
创建前端用户
要创建新的前端用户,您可以使用neos.neos:user:create命令,例如
./flow user:create --authentication-provider "Networkteam.Neos.FrontendLogin:Frontend" --roles "Networkteam.Neos.FrontendLogin:FrontendUser"
或者使用Neos后端中的用户管理模块。
创建成员区域
该包不提供具体实现。它只提供mixin。要创建成员区域,您需要为MemberAreaRootPages定义特定的nodeType,该nodeType实现此包提供的mixin。
定义您的节点类型
您需要为MemberAreaRootPages定义一个节点类型。
一个示例配置可能如下所示
Packages/Application/Your.Package/Configuration/NodeTypes.MemberAreaRootPage.yaml
'Your.Package:MemberAreaRootPage': superTypes: 'Neos.Neos:Document': true 'Networkteam.Neos.FrontendLogin:Mixins.MemberAreaRoot': true ui: label: 'Member area'
定义融合对象
对于您定义的节点类型,您需要一个合适的融合对象。一个示例配置可能如下所示
Packages/Application/Your.Package/Resources/Private/Fusion/MemberAreaRootPage.fusion
# MemberAreaRootPage
prototype(Your.Package:MemberAreaRootPage) < prototype(Neos.Neos:Page) {
}
提示:通常您会继承自您站点包的默认页面原型。
添加页面和登录表单
现在您可以登录到 Neos 后端并创建一个新的 MemberAreaRootPage。通过选择访问角色并应用更改来定义哪些用户可以访问此会员区域。
接下来,您需要在未受保护的页面上添加一个 登录表单。不要在会员区域或 MemberAreaRootPage 内放置登录表单。否则,您的用户将无法访问登录表单。
现在回到之前创建的 MemberAreaRootPage,选择包含登录表单的页面(登录表单页面)。
此外,您还可以在 MemberAreaRootPage 之下添加更多页面。它们将是受保护的。
添加您自己的 MemberArea 角色
如果您通过 Policy.yaml 定义自己的 MemberArea 角色,请确保将它们作为 parentRoles 添加到 Neos.Neos:AbstractEditor 角色定义中。否则,只有具有您新角色的页面才会在 Neos 后端中可见。这还可能导致发布时的错误。
Policy.yaml
roles: 'Your.Package:UserWithFrontendAccess': parentRoles: [ 'Networkteam.Neos.FrontendLogin:MemberArea' ] 'Neos.Neos:AbstractEditor': parentRoles: [ 'Your.Package:UserWithFrontendAccess' ]
密码重置
为了给您的前端用户提供重置密码的可能性,您可以安装并使用包 Networkteam.Neos.PasswordReset。
翻译
要翻译登录错误消息或登录表单标签,为您的包中的每种语言创建一个 xliff 文件,并在 <file> 标签上设置属性 original="Main" 和 product-name="Networkteam.Neos.FrontendLogin"。现在您可以覆盖您喜欢的 Networkteam.Neos.FrontendLogin 包的原始翻译文件中的语言键。
<?xml version="1.0" encoding="UTF-8"?> <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> <file original="Main" product-name="Networkteam.Neos.FrontendLogin" source-language="en" datatype="plaintext"> <body> <trans-unit id="components.atoms.loginform.username" xml:space="preserve"> <source>Enter your username</source> </trans-unit> <trans-unit id="components.atoms.loginform.password" xml:space="preserve"> <source>Enter your password</source> </trans-unit> <trans-unit id="authentication.onAuthenticationFailure.authenticationFailed" xml:space="preserve"> <source><![CDATA[<strong>Authentication failed!</strong><br />The login could not be performed with the given credentials.]]></source> </trans-unit> </body> </file> </xliff>