Veranstaltungen-APP/API_AUTHENTICATION_GUIDE.md

7.4 KiB

API Authentication Guide - Mobile App Integration

Overview

Your Laravel application is now fully configured with Laravel Sanctum token-based authentication, perfect for mobile app development.

System Status

Completed Features

  • User authentication with email/password
  • Role-based access control (user, organizer, admin)
  • Token generation and validation
  • Protected API endpoints
  • User favorites system
  • Event management with permissions

Test Users Available

All passwords are password123

Email Role Purpose
user@example.com user Regular user - can view events & favorites
organizer@example.com organizer Can create/update/delete own events
admin@example.com admin Full system access

API Endpoints

1. Authentication Endpoints (PUBLIC)

Login

POST /api/auth/login
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "password123"
}

Response (200):
{
  "success": true,
  "message": "Login erfolgreich",
  "user": {
    "id": 1,
    "name": "Test User",
    "email": "user@example.com",
    "role": "user",
    "created_at": "2025-04-14T08:42:12.000000Z",
    "updated_at": "2025-04-14T08:42:12.000000Z"
  },
  "token": "1|PZHueLvJEr6d9mU1d4J7FUVJiPh0LD1Uy6S2Qc"
}

Register

POST /api/auth/register
Content-Type: application/json

{
  "name": "New User",
  "email": "newuser@example.com",
  "password": "password123",
  "password_confirmation": "password123",
  "role": "user"  // Optional: "user" (default), "organizer", or "admin"
}

Response (201): Similar to login response with new user token

2. Protected Endpoints (REQUIRE auth:sanctum)

All protected endpoints require the token in the Authorization header:

Authorization: Bearer YOUR_TOKEN_HERE

Get Current User

GET /api/auth/me
Authorization: Bearer 1|PZHueLvJEr6d9mU1d4J7FUVJiPh0LD1Uy6S2Qc

Update Profile

PUT /api/auth/profile
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "name": "Updated Name",
  "email": "newemail@example.com"
}

Change Password

POST /api/auth/change-password
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "current_password": "password123",
  "password": "newpassword123",
  "password_confirmation": "newpassword123"
}

Logout

POST /api/auth/logout
Authorization: Bearer YOUR_TOKEN

3. Public Event Endpoints

List All Events

GET /api/events

Get Event Details

GET /api/events/{id}

Get Available Locations

GET /api/events/locations/list

Get Available Categories

GET /api/events/categories/list

4. Protected Event Management (Organizers Only)

Get My Events

GET /api/events/my-events
Authorization: Bearer YOUR_TOKEN

Create Event (Organizer/Admin Only)

POST /api/events
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "title": "New Event",
  "description": "Event description",
  "category": "Music",
  "location_id": 1,
  "website_url": "https://...",
  "contact_email": "contact@...",
  "contact_phone": "+49..."
}

Update Event (Creator Only)

PUT /api/events/{id}
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

{
  "title": "Updated Title",
  "description": "Updated description",
  ...
}

Delete Event (Creator Only)

DELETE /api/events/{id}
Authorization: Bearer YOUR_TOKEN

5. Favorites System

Toggle Favorite

POST /api/events/{id}/toggle-favorite
Authorization: Bearer YOUR_TOKEN

Get My Favorites

GET /api/events/favorites
Authorization: Bearer YOUR_TOKEN

Mobile App Integration

Authentication Flow

1. User enters email and password
   ↓
2. POST /api/auth/login
   ↓
3. Receive token from response
   ↓
4. Store token securely (e.g., keychain on iOS, Keystore on Android)
   ↓
5. Include token in all subsequent API calls:
   Authorization: Bearer {token}
   ↓
6. If token expires/401 error, prompt re-login

Token Storage Best Practices

iOS (Swift):

// Store in Keychain
try keychain.store(token, key: "api_token")
let token = try keychain.retrieveString("api_token")

Android (Kotlin):

// Store in Encrypted SharedPreferences
val token = encryptedSharedPreferences.getString("api_token", null)
encryptedSharedPreferences.edit().putString("api_token", token).apply()

Flutter:

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

const storage = FlutterSecureStorage();
await storage.write(key: "api_token", value: token);
String? token = await storage.read(key: "api_token");

Request Headers

GET /api/auth/me HTTP/1.1
Host: localhost:8000
Authorization: Bearer 1|PZHueLvJEr6d9mU1d4J7FUVJiPh0LD1Uy6S2Qc
Content-Type: application/json
Accept: application/json

Error Handling

Typical HTTP Responses

Status Meaning Action
200 Success Process response data
201 Created Resource successfully created
400 Bad Request Check request format/validation
401 Unauthorized Token invalid/expired - re-login
403 Forbidden User lacks permission for this action
404 Not Found Resource doesn't exist
500 Server Error Report to developer

Error Response Format

{
  "success": false,
  "message": "Error description",
  "errors": {
    "field_name": ["Validation error message"]
  }
}

Role-Based Permissions

Feature user organizer admin
View events
Create event
Edit own event
Delete own event
Manage favorites
Admin panel

Environment Details


Troubleshooting

401 Unauthorized

  • Token might be expired
  • Token format incorrect
  • Token not included in header
  • Solution: Re-login to get new token

403 Forbidden

  • Your user role doesn't have permission
  • Solution: Use appropriate user role for action

422 Unprocessable Entity

  • Validation error in request data
  • Check response errors field for details
  • Ensure all required fields are provided

Next Steps for Mobile Development

  1. Authentication Flow

    • Create login screen with email/password fields
    • Implement token storage using platform-specific secure storage
    • Create auto-login using stored token
  2. Event Listing

    • Fetch events from /api/events
    • Implement pagination if needed
    • Add search/filter functionality
  3. Event Details

    • Show event location, description, contact info
    • Allow authenticated users to favorite events
  4. User Profile

    • Display user info from /api/auth/me
    • Allow profile updates and password changes
  5. Event Management (for Organizers)

    • Create events form
    • Edit/delete own events
    • View analytics

Support & Documentation


Last Updated: April 2025 Status: Production Ready for Mobile App Development