Malla文档

访客账户

为站点访客内置的注册、登录和魔法链接,以及角色和页面访问规则。

用户指南

你的站点可以拥有自己的会员:注册、登录、魔法链接、角色、受保护的页面以及按行的数据访问控制。访客账户保存在站点自己的数据库中,与编辑站点的人完全分开。

注册邮箱和密码,或魔法链接。
验证打开魔法链接即可验证邮箱。
访问控制页面访问规则和行规则会检查 user。
角色在 Visitors 中或通过工作流分配角色。

构建注册和登录

  1. 设计表单

    添加邮箱和密码输入框,并把它们双向绑定到变量,例如 vars.email 和 vars.password。

  2. 添加工作流

    在按钮的点击事件上,用这些变量运行 Sign up visitor 或 Log in visitor,然后跳转到会员专区。如需无密码登录,请使用 Send sign-in link。

  3. 显示正确的内容

    把可见性绑定到 user.isLoggedIn,用 user.name 打招呼,并添加一个运行 Log out visitor 的按钮。

user 作用域

每个绑定、工作流和规则都可以读取 user。未登录的访客是 { isLoggedIn: false, id: NaN, roles: [] },永远不会是 null,所以请判断 user.isLoggedIn。

js
user = {
  isLoggedIn: true,
  id: 42,
  email: "ada@example.com",
  name: "Ada",
  emailVerified: true,
  roles: ["member"],
  meta: {}
}

邮箱验证

用密码注册并不能证明某人拥有该邮箱,因此账户初始为 emailVerified: false。打开魔法链接会将其设为 true。如果该账户设置过密码,验证会清除密码并结束其所有会话:用别人邮箱注册的人,会在真正的邮箱所有者通过链接登录后立即失去访问权限。在重要的地方要求验证,例如 user.isLoggedIn && user.emailVerified。

页面访问

未选中任何元素时,检查器显示页面设置。开启 Restrict 并编写访问规则,例如 user.isLoggedIn 或 user.roles.includes('admin')。不满足规则的访客会被重定向到你选择的页面,或得到 404。

  • 每次请求都会在服务器上检查规则;受保护的页面永远不会从共享缓存中提供。
  • 受保护页面的客户端查询也会经过同样的检查,因此无法直接获取其数据。

角色

在 Tables → Visitors 中定义角色并分配,或使用 Set visitor roles 服务端步骤分配(例如在付款之后)。