SuperAPI AI 工具集

authentication-best-practices

安全与审计

查看项目

更新于 10-15 13:58

技能介绍

用途

该技能用于在应用中实现认证相关的最佳实践,基于 Better Auth 完成会话读取、路由保护以及登录/注册/登出流程的搭建。适用于需要对页面或 API 进行认证门控,或需要接入认证流程的场景。

前置条件

使用前需先完成以下设置配方:

  • Better Auth Setup

主要能力

客户端会话

在客户端组件中使用来自 @/lib/auth/client 的认证客户端钩子。

"use client";

import { useSession, signOut } from "@/lib/auth/client";

export function UserMenu() {
  const { data: session, isPending } = useSession();

  if (isPending) return Loading...;
  if (!session) return Sign In;

  return (

      {session.user.name}
      <button onClick={() => signOut()}>Sign Out

  );
}

服务端会话

在 Server Components 和 API 路由中,使用请求的 headers 调用 auth.api.getSession。

import { auth } from "@/lib/auth/server";
import { headers } from "next/headers";

const session = await auth.api.getSession({ headers: await headers() });

if (!session) {
  return new Response("Unauthorized", { status: 401 });
}

// session.user.id for queries...

保护路由

将未认证用户从受保护页面重定向出去,并将已认证用户从认证页面重定向出去。

import { redirect } from "next/navigation";
import { headers } from "next/headers";
import { auth } from "@/lib/auth/server";

export default async function ProtectedPage() {
  const session = await auth.api.getSession({ headers: await headers() });
  if (!session) redirect("/sign-in");
  return <Dashboard user={session.user} />;
}

export default async function SignInPage() {
  const session = await auth.api.getSession({ headers: await headers() });
  if (session) redirect("/chats");
  return <SignIn />;
}

验证会话后,并行获取用户特定数据。

const [chats, profile] = await Promise.all([
  getUserChats(session.user.id),
  getUserProfile(session.user.id),
]);

登录 / 注册 / 登出

import { signIn, signUp, signOut } from "@/lib/auth/client";

await signIn.email({ email, password, callbackURL: "/chats" });
await signIn.social({ provider: "google", callbackURL: "/chats" });

await signUp.email({ email, password, name, callbackURL: "/verify-email" });

await signOut({
  fetchOptions: { onSuccess: () => router.push("/") },
});

参考

  • Better Auth React
  • Better Auth Server