你的站点可以拥有自己的会员:注册、登录、魔法链接、角色、受保护的页面以及按行的数据访问控制。访客账户保存在站点自己的数据库中,与编辑站点的人完全分开。
构建注册和登录
设计表单
添加邮箱和密码输入框,并把它们双向绑定到变量,例如
vars.email和vars.password。添加工作流
在按钮的点击事件上,用这些变量运行 Sign up visitor 或 Log in visitor,然后跳转到会员专区。如需无密码登录,请使用 Send sign-in link。
显示正确的内容
把可见性绑定到
user.isLoggedIn,用user.name打招呼,并添加一个运行 Log out visitor 的按钮。
user 作用域
每个绑定、工作流和规则都可以读取 user。未登录的访客是 { isLoggedIn: false, id: NaN, roles: [] },永远不会是 null,所以请判断 user.isLoggedIn。
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 服务端步骤分配(例如在付款之后)。