Blitz 尚在 beat 阶段! 🎉 预计会在今年的 Q3 季度发布 1.0
Back to Documentation Menu

权限 Hooks & 公用库

Topics

Jump to a Topic

useSession()

useSession(options?) => Partial<PublicData> & {isLoading: boolean}

示例

import { useSession } from "blitz"

const session = useSession()

参数

  • options:
    • 可选
    • initialPublicData: PublicData - 将此与 SSR 一起使用以设置来自服务器 会话的公共数据
    • suspense: boolean - 默认为 true

返回

  • session: Partial<PublicData> & {isLoading: boolean}

useAuthenticatedSession()

useAuthenticatedSession(options?) => PublicData & {isLoading: boolean}

如果用户没有登录将抛出 AuthenticationError

示例

import { useAuthenticatedSession } from "blitz"

const session = useAuthenticatedSession()

参数

  • options:
    • 可选
    • initialPublicData: PublicData - 将此与 SSR 一起使用以设置来自服务器 会话的公共数据
    • suspense: boolean - 默认为 true

返回

  • session: PublicData & {isLoading: boolean}

useAuthorize()

useAuthorize() => void

如果用户没有登录将返回 AuthenticationError

示例

import { useAuthorize } from "blitz"

useAuthorize()

参数

返回

useRedirectAuthenticated()

useRedirectAuthenticated(to: string) => void

这会将登录用户重定向到给定的 URL 路径中。它对注销的用户没有任何作用。

示例

import { useRedirectAuthenticated } from "blitz"

useRedirectAuthenticated("/dashboard")

参数

  • to: string
    • 必须
    • 让已登录用户重定向到的 URL 路径

返回

generateToken()

generateToken(numberOfCharacters: number = 32) => string

这是一个基于 nanoid 的便利包装器,用于为密 码重置等任务生成令牌。

示例用法

import { generateToken } from "blitz"

const token = generateToken()

hash256()

hash256(value: string) => string

这是一个基于 crypto 模块的便利包装器 ,使用 sha256 算法散列字符串。它用于将密码重置令牌保存到数据库之前对其进 行哈希处理。

示例用法

import { hash256 } from "blitz"

const hashedToken = hash256(token)

SecurePassword

SecurePassword 是一个基于 secure-password 的便利包装 器,提供一个哈希密码并验证密码哈希值的良好方式。

import { SecurePassword } from "blitz"

await SecurePassword.hash(password)
await SecurePassword.verify(passwordHash, password)

SecurePassword.hash(password: string) => Promise<string>

当用户设置一个新密码时会被使用。

它需要一个密码字符串并返回一个安全的哈希值来存储在你的数据库中。

SecurePassword.verify(passwordHash: string, password: string) => Promise<ResultCode>

当用户登录时验证密码是否正确时使用。

它从数据库中接收一个密码哈希值和传来的密码。它会检查传来的密码是否正确并返 回处理代码,或如果不正确则抛出错误 AuthenticationError

处理代码

SecurePassword.VALID

该密码已被验证且通过验证。

SecurePassword.VALID_NEEDS_REHASH

该密码已被验证且通过验证,但需要新的参数来重新哈希。

SecurePassword.HASH_BYTES

hashhashSync 返回的 hash Buffer 大小,被 verifyverifySync 使用。

示例用法

import { SecurePassword, AuthenticationError } from "blitz"
import db from "db"

export const authenticateUser = async (
  email: string,
  password: string
) => {
  const user = await db.user.findFirst({ where: { email } })
  if (!user) throw new AuthenticationError()

  const result = await SecurePassword.verify(
    user.hashedPassword,
    password
  )

  if (result === SecurePassword.VALID_NEEDS_REHASH) {
    // 通过更安全的哈希来更新哈希过的密码
    const improvedHash = await SecurePassword.hash(password)
    await db.user.update({
      where: { id: user.id },
      data: { hashedPassword: improvedHash },
    })
  }

  const { hashedPassword, ...rest } = user
  return rest
}

setPublicDataForUser()

setPublicDataForUser(userId: PublicData['userId'], publicData: Record<any, any>) => void

This can be used to update the publicData of a user's sessions. It can be useful when changing a user's role, since the new permissions can be enforced as soon as the user is doing the next request.

Example Usage

import { setPublicDataForUser } from "blitz"
import db from "db"

export const updateUserRole = async (
  userId: PublicData["userId"],
  role: string
) => {
  // update the user's role
  await db.user.update({ where: { id: userId }, data: { role } })
  // update role in all active sessions
  await setPublicDataForUser(userId, { role })
}

Idea for improving this page? Edit it on GitHub.