authentication

When working with authentication:

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "authentication" with this command: npx skills add santiagoxor/pintureria-digital/santiagoxor-pintureria-digital-authentication

Authentication

Quick Start

When working with authentication:

  • Use auth() from @/lib/auth to get current session

  • Verify roles before admin operations

  • Use middleware for route protection

  • Never store tokens in localStorage (use httpOnly cookies)

  • Validate JWT tokens in API routes

Key Files

  • auth.ts

  • NextAuth.js configuration

  • src/lib/auth/

  • Auth utilities

  • middleware.ts

  • Route protection

  • src/app/api/auth/

  • Auth API routes

Common Patterns

Get Current Session

import { auth } from '@/lib/auth';

export async function GET(request: NextRequest) { const session = await auth();

if (!session) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); }

return NextResponse.json({ user: session.user }); }

Check Admin Role

const session = await auth();

if (session?.user?.role !== 'admin') { return NextResponse.json({ error: 'Forbidden' }, { status: 403 }); }

Protected API Route

import { auth } from '@/lib/auth'; import { NextRequest, NextResponse } from 'next/server';

export async function POST(request: NextRequest) { // 1. Check authentication const session = await auth(); if (!session) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); }

// 2. Check authorization (if needed) if (session.user.role !== 'admin') { return NextResponse.json({ error: 'Forbidden' }, { status: 403 }); }

// 3. Process request const body = await request.json(); // ... business logic }

Middleware Protection

// middleware.ts import { auth } from '@/lib/auth'; import { NextResponse } from 'next/server';

export async function middleware(request: NextRequest) { const session = await auth();

// Protect admin routes if (request.nextUrl.pathname.startsWith('/admin')) { if (!session || session.user.role !== 'admin') { return NextResponse.redirect(new URL('/login', request.url)); } }

return NextResponse.next(); }

Sign In/Out

import { signIn, signOut } from '@/lib/auth';

// Sign in await signIn('google', { callbackUrl: '/dashboard', });

// Sign out await signOut({ callbackUrl: '/', });

User Roles

  • admin

  • Full access

  • customer

  • Regular user

  • moderator

  • Limited admin access

Session Structure

interface Session { user: { id: string; email: string; name?: string; role: 'admin' | 'customer' | 'moderator'; image?: string; }; expires: string; }

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

checkout-payments

No summary provided by upstream source.

Repository SourceNeeds Review
General

postgres-best-practices

No summary provided by upstream source.

Repository SourceNeeds Review
General

error-handling

No summary provided by upstream source.

Repository SourceNeeds Review
General

git-commit-push

No summary provided by upstream source.

Repository SourceNeeds Review