Quickstart

React 快速开始

向任意 React 应用添加 Nebutra 认证和权限门控。

前提条件

第一步:安装 SDK

npm install @nebutra/sdk @nebutra/react

第二步:用 NebutraProvider 包裹应用

import { NebutraProvider } from "@nebutra/react";

createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <NebutraProvider orgId={import.meta.env.VITE_NEBUTRA_ORG_ID}>
      <App />
    </NebutraProvider>
  </StrictMode>
);

第三步:通过 Hook 访问认证状态

import { useNebutraUser, useNebutraOrg } from "@nebutra/react";

export function UserMenu() {
  const { user, isLoaded, isSignedIn } = useNebutraUser();
  const { org } = useNebutraOrg();

  if (!isLoaded) return <Skeleton />;
  if (!isSignedIn) return <SignInButton />;

  return <p>{user.fullName} · {org.name} · {org.plan}</p>;
}

第四步:用权限检查门控 UI

import { Can } from "@nebutra/react";

export function DeleteButton({ projectId }: { projectId: string }) {
  return (
    <Can action="delete" resource="Project">
      <button onClick={() => handleDelete(projectId)}>删除项目</button>
    </Can>
  );
}

如果当前用户缺少所需范围,<Can> 组件将不渲染任何内容。

第五步:保护路由

import { useNebutraUser } from "@nebutra/react";
import { Navigate } from "react-router-dom";

export function ProtectedRoute({ children }: { children: React.ReactNode }) {
  const { isLoaded, isSignedIn } = useNebutraUser();

  if (!isLoaded) return <LoadingSpinner />;
  if (!isSignedIn) return <Navigate to="/sign-in" />;

  return <>{children}</>;
}

相关文档

How is this guide?

目录