authButtons.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use client";
  2. import { useKindeBrowserClient } from "@kinde-oss/kinde-auth-nextjs";
  3. import Link from "next/link";
  4. export function LoginButton() {
  5. return (
  6. <Link
  7. href="/api/auth/login"
  8. className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
  9. >
  10. Login
  11. </Link>
  12. );
  13. }
  14. export function LogoutButton() {
  15. const { user } = useKindeBrowserClient();
  16. if (!user) return null;
  17. return (
  18. <Link
  19. href="/api/auth/logout"
  20. className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
  21. >
  22. Logout
  23. </Link>
  24. );
  25. }
  26. export function RegisterButton() {
  27. return (
  28. <Link
  29. href="/api/auth/register"
  30. className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
  31. >
  32. Register
  33. </Link>
  34. );
  35. }
  36. export function UserInfo() {
  37. const { user, isLoading } = useKindeBrowserClient();
  38. if (isLoading) return <div>Loading...</div>;
  39. if (!user) return null;
  40. return (
  41. <div className="text-sm text-center sm:text-left">
  42. <p>Welcome, {user.given_name || user.email}!</p>
  43. </div>
  44. );
  45. }