认证指的是身份验证和授权,这是构建 Web 应用程序时的常见需求。身份验证意味着根据用户提供的凭据验证用户是否是他们所说的那个人。授权意味着确定他们被允许执行哪些操作。 ## 会话与令牌 在用户提供了他们的凭据,如用户名和密码之后,我们希望允许他们无需再次提供凭据即可使用应用程序。用户通常在后续请求中使用会话标识符或签名令牌,如 JSON Web Token(JWT)进行身份验证。 会话 ID 通常存储在数据库中。它们可以立即撤销,但需要在每个请求上进行数据库查询。 与 JWT 通常不与数据存储进行校验相比,这意味着它们不能立即被撤销。这种方法的优势是提高了延迟并减少了您数据存储的负载。 ## 集成点 认证[cookies](@sveltejs-kit#Cookies)可以在[服务器钩子](hooks#Server-hooks)内部进行检查。如果找到与提供的凭据匹配的用户,则可以将用户信息存储在[`locals`](hooks#Server-hooks-locals)中。 ## 指南 [Lucia](https://lucia-auth.com/) 是基于会话的 Web 应用程序身份验证的良好参考。它包含在 SvelteKit 和其他 JS 项目中实现基于会话的身份验证的示例代码片段和项目。您可以在创建新项目时使用 `npx sv create` 将遵循 Lucia 指引的代码添加到您的项目中,或者在使用现有项目时使用 `npx sv add lucia`。 一个认证系统与 Web 框架紧密耦合,因为大部分代码都用于验证用户输入、处理错误并将用户导向适当的下一页。因此,许多通用的 JS 认证库都包含一个或多个 Web 框架。正因为如此,许多用户可能会更倾向于遵循 SvelteKit 特定的指南,例如在[Lucia](https://lucia-auth.com/)中找到的示例,而不是在他们的项目中包含多个 Web 框架。