@ackplus/nest-aut-反应
反应提供者、钩子、卫士和头等舱Next.js App路由器帮助 @ackplus/nest-auth无头——带来自己的UI.
📚 完整文档: ack-solutions.github.io/nst-auth/docs/resact 互联网档案馆的存檔,存档日期2013-12-02
为什么用它
顶部的薄反射层 @ackplus/nest-auth-client 这样你就能手动构建出一切: 上下文提供者, 狭义的重接接钩, 守护部件, 通过 Next.js Server 组件的路由级别守护, 以及跨塔布同步.
它无头——没有有风格的按钮,没有有观点的表格——所以它会掉入任何回放 18/19 app 或 Next.js App Router 项目,而不与你的设计系统相对抗.
安装
pnpm add @ackplus/nest-auth-react @ackplus/nest-auth-client
| 端点 | 版本数 |
|---|---|
react | ^18.0.0 || ^19.0.0 |
AI 编码代理
使用 Claude 代码, Codex, Cursor 或者另一个 AI 编码代理? 安装 Nest Auth 技能使其知道 SDK 的真实 API :
npx @ackplus/nest-auth-skill
它检测你的堆栈( 或通过) --stack react),并且只添加代理指令文件;您的应用程序不会被更改.
包括什么
| 表面 | API 密码 |
|---|---|
| 提供者 | <AuthProvider> · (委托人) <NextAuthProvider> (带有SSR初始状态水分) |
| 钩子 | useNestAuth • 妇女 useUser • 妇女 useSession • 妇女 useAccessToken • 妇女 useAuthStatus • 妇女 useHasRole • 妇女 useHasPermission |
| 警卫部分 | <AuthGuard> • 妇女 <GuestGuard> • 妇女 <RequireRole> • 妇女 <RequirePermission> |
| 人道主义协调员 | withRequireRole • 妇女 withRequirePermission (+ 数) createRequireRoleHOC 编号 : createRequirePermissionHOC 工厂) |
| Next.js 帮助者 | createNextAuthHelpers 返回时 { getServerAuth, withAuth, createInitialState } |
| 交叉调制同步 | CrossTabSync 编号 : createCrossTabSync() —— 说 BroadcastChannel 与 localStorage 倒计时 |
最小实例- SPA
import { AuthClient } from '@ackplus/nest-auth-client';
import { AuthProvider, useNestAuth, AuthGuard, useUser } from '@ackplus/nest-auth-react';
const client = new AuthClient({ baseUrl: 'https://api.example.com' });
export default function App() {
return (
<AuthProvider client={client}>
<Routes />
</AuthProvider>
);
}
function Dashboard() {
return (
<AuthGuard fallback={<a href="/login">Sign in</a>}>
<DashboardInner />
</AuthGuard>
);
}
function DashboardInner() {
const user = useUser();
return <h1>Hello {user?.email}</h1>;
}
function LoginForm() {
const { login, error, isLoading } = useNestAuth();
return (
<form onSubmit={async (e) => {
e.preventDefault();
await login({ credentials: { email, password } });
}}>
{/* … */}
<button disabled={isLoading}>Sign in</button>
{error && <p>{error.message}</p>}
</form>
);
}
最小示例 — Next.js App 路由器
// app/layout.tsx (Server Component)
import { cookies } from 'next/headers';
import { NextAuthProvider } from '@ackplus/nest-auth-react';
import { client, authHelpers } from '@/lib/auth';
export default async function RootLayout({ children }) {
const initialState = await authHelpers.getServerAuth(await cookies());
return (
<html lang="en">
<body>
<NextAuthProvider client={client} initialState={initialState}>
{children}
</NextAuthProvider>
</body>
</html>
);
}
// app/api/private/route.ts
import { authHelpers } from '@/lib/auth';
export const GET = authHelpers.withAuth(async (req) => {
return Response.json({ user: req.auth.user });
});
角色标识权限( L)
import { RequireRole, RequirePermission, useHasRole } from '@ackplus/nest-auth-react';
<RequireRole role="admin" fallback={<NotAuthorized />}>
<AdminPanel />
</RequireRole>
<RequirePermission permission={['orders.read', 'orders.write']} matchAll>
<OrderEditor />
</RequirePermission>
// Or via hook
const isAdmin = useHasRole('admin');
文档
| 节次 | 这是什么 |
|---|---|
| 提供者 | <AuthProvider>, (中文(简体) ), <NextAuthProvider>,所有道具 |
| 钩子 | 每个钩子都有回回形和回回音 |
| 警卫 | 部件+HOCs+工厂 |
| 下一个.js | App 路由器 SSR 模式, withAuth中间软件重定向 |
| 跨标签同步 | 多塔布登录/日志传播 |
| 快速启动——反应 | SPA 设置到结束 |
| 快速启动 — Next.js | App 路由器设置到结束 |
配套软件包
| 软件包 | 使用时间 |
|---|---|
@ackplus/nest-auth | NestJS 后端模块 此客户端向 |
@ackplus/nest-auth-client | 香草JS客户端 这个包裹包裹 |
@ackplus/nest-auth-contracts | 共享的 TS 类型( 已经是一个中转分解) |
所有4个包都与同版本号一起放出. 把它们绑在同一个版本.