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
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
由 hash
和 hashSync
返回的 hash
Buffer 大小,被 verify
和
verifySync
使用。
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.
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 })
}