# Coaster World — Connexion Google / Apple (v1.115.0)

## 1. Base de données

Exécuter la migration Laravel :

```bash
php artisan migrate
```

Alternative MySQL manuelle : `database/migrations/sql/coaster_world_v1.115.0_social_auth.sql`.

La migration rend `users.password` nullable pour les comptes créés uniquement avec Google/Apple et crée `user_auth_providers`. Aucun access token ni refresh token Google/Apple n'est conservé en base.

## 2. Google

Créer un client OAuth 2.0 de type **Web application** dans Google Cloud et déclarer l'URI de redirection exacte du site.

Variables `.env` :

```dotenv
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI=https://coaster-world.com/auth/google/callback
```

Pour un environnement de test, l'URI configurée chez Google doit correspondre exactement à celle utilisée par Laragon.

## 3. Apple

Dans Apple Developer, activer **Sign in with Apple**, créer/configurer le **Services ID** utilisé par le site, le domaine et l'URI de retour, puis créer une clé privée Sign in with Apple.

Variables `.env` :

```dotenv
APPLE_CLIENT_ID=
APPLE_TEAM_ID=
APPLE_KEY_ID=
APPLE_PRIVATE_KEY_PATH=C:/chemin/securise/AuthKey_XXXXXXXXXX.p8
APPLE_REDIRECT_URI=https://coaster-world.com/auth/apple/callback
```

`APPLE_PRIVATE_KEY` peut remplacer `APPLE_PRIVATE_KEY_PATH` si l'hébergeur impose une clé dans l'environnement. Ne jamais placer le fichier `.p8` dans `public/` ni dans une archive de livraison.

Apple impose un domaine web enregistré et une URL de retour HTTPS ; son flux web renvoie le callback en POST (`response_mode=form_post`). La route Apple est donc exclue du CSRF Laravel classique, mais elle reste protégée par les contrôles OAuth `state` et OpenID Connect `nonce`, ainsi que par la vérification cryptographique du jeton d'identité.

## 4. Après configuration

```bash
php artisan config:clear
php artisan cache:clear
```

Vérifier ensuite :

- création d'un compte avec Google ;
- création d'un compte avec Apple ;
- connexion avec un fournisseur déjà associé ;
- association Google/Apple depuis **Paramètres du compte → Sécurité** ;
- refus de création d'un doublon quand l'e-mail existe déjà ;
- création d'un mot de passe sur un compte social-only ;
- impossibilité de supprimer la dernière méthode de connexion.
