add-auth-endpoint
Add authentication endpoints (register, login, refresh, logout) to NovaTune
Best use case
add-auth-endpoint is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Add authentication endpoints (register, login, refresh, logout) to NovaTune
Teams using add-auth-endpoint should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/add-auth-endpoint/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How add-auth-endpoint Compares
| Feature / Agent | add-auth-endpoint | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Add authentication endpoints (register, login, refresh, logout) to NovaTune
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Add Authentication Endpoint Skill
Add authentication endpoints (register, login, refresh, logout) to NovaTune.
## Project Context
- Auth endpoints go in: `src/NovaTuneApp/NovaTuneApp.ApiService/Endpoints/AuthEndpoints.cs`
- Auth services go in: `src/NovaTuneApp/NovaTuneApp.ApiService/Services/`
- DTOs go in: `src/NovaTuneApp/NovaTuneApp.ApiService/Models/Auth/`
## Steps
### 1. Create Request/Response DTOs
Location: `src/NovaTuneApp/NovaTuneApp.ApiService/Models/Auth/`
```csharp
// RegisterRequest.cs
public record RegisterRequest(
string Email,
string DisplayName,
string Password);
// LoginRequest.cs
public record LoginRequest(
string Email,
string Password);
// RefreshRequest.cs
public record RefreshRequest(string RefreshToken);
// AuthResponse.cs
public record AuthResponse(
string AccessToken,
string RefreshToken,
int ExpiresIn,
string TokenType = "Bearer");
// UserResponse.cs
public record UserResponse(
string UserId,
string Email,
string DisplayName);
```
### 2. Create Auth Service Interface
Location: `src/NovaTuneApp/NovaTuneApp.ApiService/Services/IAuthService.cs`
```csharp
public interface IAuthService
{
Task<UserResponse> RegisterAsync(RegisterRequest request, CancellationToken ct);
Task<AuthResponse> LoginAsync(LoginRequest request, CancellationToken ct);
Task<AuthResponse> RefreshAsync(RefreshRequest request, CancellationToken ct);
Task LogoutAsync(string userId, string refreshToken, CancellationToken ct);
}
```
### 3. Create Auth Endpoints
Location: `src/NovaTuneApp/NovaTuneApp.ApiService/Endpoints/AuthEndpoints.cs`
```csharp
public static class AuthEndpoints
{
public static void MapAuthEndpoints(this IEndpointRouteBuilder app)
{
var group = app.MapGroup("/auth")
.WithTags("Authentication")
.WithOpenApi();
group.MapPost("/register", Register)
.WithName("Register")
.Produces<UserResponse>(StatusCodes.Status201Created)
.ProducesProblem(StatusCodes.Status400BadRequest)
.ProducesProblem(StatusCodes.Status409Conflict);
group.MapPost("/login", Login)
.WithName("Login")
.Produces<AuthResponse>(StatusCodes.Status200OK)
.ProducesProblem(StatusCodes.Status401Unauthorized)
.ProducesProblem(StatusCodes.Status403Forbidden);
group.MapPost("/refresh", Refresh)
.WithName("RefreshToken")
.Produces<AuthResponse>(StatusCodes.Status200OK)
.ProducesProblem(StatusCodes.Status401Unauthorized);
group.MapPost("/logout", Logout)
.WithName("Logout")
.RequireAuthorization()
.Produces(StatusCodes.Status204NoContent);
}
private static async Task<IResult> Register(
RegisterRequest request,
IAuthService authService,
CancellationToken ct)
{
var user = await authService.RegisterAsync(request, ct);
return TypedResults.Created($"/users/{user.UserId}", user);
}
private static async Task<IResult> Login(
LoginRequest request,
IAuthService authService,
CancellationToken ct)
{
var response = await authService.LoginAsync(request, ct);
return TypedResults.Ok(response);
}
private static async Task<IResult> Refresh(
RefreshRequest request,
IAuthService authService,
CancellationToken ct)
{
var response = await authService.RefreshAsync(request, ct);
return TypedResults.Ok(response);
}
private static async Task<IResult> Logout(
ClaimsPrincipal user,
IAuthService authService,
CancellationToken ct)
{
var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);
await authService.LogoutAsync(userId!, ct);
return TypedResults.NoContent();
}
}
```
### 4. Register in Program.cs
```csharp
// Register services
builder.Services.AddScoped<IAuthService, AuthService>();
// Map endpoints (after app.Build())
app.MapAuthEndpoints();
```
## Error Handling
Return RFC 7807 Problem Details for auth errors:
```csharp
public static IResult InvalidCredentials() =>
TypedResults.Problem(
title: "Invalid Credentials",
detail: "The email or password provided is incorrect.",
statusCode: StatusCodes.Status401Unauthorized,
type: "https://novatune.example/errors/invalid-credentials");
public static IResult AccountDisabled() =>
TypedResults.Problem(
title: "Account Disabled",
detail: "This account has been disabled.",
statusCode: StatusCodes.Status403Forbidden,
type: "https://novatune.example/errors/account-disabled");
public static IResult EmailExists() =>
TypedResults.Problem(
title: "Email Already Registered",
detail: "An account with this email already exists.",
statusCode: StatusCodes.Status409Conflict,
type: "https://novatune.example/errors/email-exists");
```
## Rate Limiting
Apply rate limiting to auth endpoints:
```csharp
group.MapPost("/login", Login)
.RequireRateLimiting("auth-login"); // 10/min per IP, 5/min per account
group.MapPost("/register", Register)
.RequireRateLimiting("auth-register"); // 10/min per IP
```
## Testing
- Unit tests: `src/unit_tests/AuthServiceTests.cs`
- Integration tests: `src/integration_tests/.../AuthEndpointsTests.cs`
Key test scenarios:
- Successful registration creates user with Active status
- Login returns JWT with correct claims
- Refresh rotates tokens and invalidates old one
- Logout revokes only current session
- Disabled user cannot login (403)
- Rate limit returns 429 with Retry-After headerRelated Skills
add-api-endpoint
Create API layer components for a new entity. Includes usecase interactors (internal/usecase/), proto definitions (schema/proto/), gRPC handlers (internal/infrastructure/grpc/), and DI registration. Use when adding CRUD endpoints or Step 3 of CRUD workflow (after add-domain-entity).
add-api-endpoint-tassadar2499-novatune
Add a new minimal API endpoint to NovaTune with service, models, and tests
Add Admin API Endpoint
Add a new endpoint or endpoints to Ghost's Admin API at `ghost/api/admin/**`.
acceptance-criteria-authoring
Write clear, testable acceptance criteria in Given-When-Then format following INVEST principles and BDD best practices.
doc-coauthoring
Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.
add-trpc-endpoint
Scaffold new tRPC API endpoints for the dealflow-network project with proper Zod validation, middleware, database functions, and client hooks. Use when adding new API routes, creating CRUD operations, or extending existing routers.
add-authorization-methods
Add authorization methods for a new entity to AuthorizationService. Use after creating a resource service. Triggers on "add permissions", "authorization methods", "entity permissions", "add auth methods".
modal-deployment
Run Python code in the cloud with serverless containers, GPUs, and autoscaling using Modal. This skill enables agents to generate code for deploying ML models, running batch jobs, serving APIs, and scaling compute-intensive workloads.
astro
This skill provides essential Astro framework patterns, focusing on server-side rendering (SSR), static site generation (SSG), middleware, and TypeScript best practices. It helps AI agents implement secure authentication, manage API routes, and debug rendering behaviors within Astro projects.
thor-skills
An entry point and router for AI agents to manage various THOR-related cybersecurity tasks, including running scans, analyzing logs, troubleshooting, and maintenance.
tech-blog
Generates comprehensive technical blog posts, offering detailed explanations of system internals, architecture, and implementation, either through source code analysis or document-driven research.
lets-go-rss
A lightweight, full-platform RSS subscription manager that aggregates content from YouTube, Vimeo, Behance, Twitter/X, and Chinese platforms like Bilibili, Weibo, and Douyin, featuring deduplication and AI smart classification.