Implementing Sign in with Apple in Laravel REST API
To implement Sign in with Apple functionality in your Laravel REST API, you'll need to follow these steps: Prerequisites An Apple Developer account A registered app in Apple Developer portal Laravel 8.x or higher PHP 7.4 or higher Setup Apple Developer Configuration Go to Apple Developer Portal Create a new App ID with "Sign In with Apple" capability enabled Note your Service ID (e.g., com.example.app) Generate a private key for "Sign In with Apple" and download it Install Required Packages composer require laravel/socialite Configuration Add these to your .env file: APPLE_CLIENT_ID=nz.co.fskills.app APPLE_TEAM_ID=J43F88Y4BH APPLE_KEY_ID=CLU5NYTK5P APPLE_PRIVATE_KEY_PATH=storage/apple_private_key.pem Store the apple_private_key.pem in storage/apple_private_key.pem -----BEGIN PRIVATE KEY----- Eapmple key -----END PRIVATE KEY----- Create an Controller : public function SocialLogin(Request $request): \Illuminate\Http\JsonResponse { $request->validate([ 'token' => 'required', 'provider' => 'required|in:google,facebook,apple', ]); try { $provider = $request->provider; $socialUser = Socialite::driver($provider)->stateless()->userFromToken($request->token); //return response()->json($socialUser); if ($socialUser) { $user = User::withTrashed()->where('email', $socialUser->email)->first(); if (!empty($user->deleted_at)) { return Helper::jsonErrorResponse('Your account has been deleted.',410); } $isNewUser = false; if (!$user) { $password = Str::random(16); $user = User::create([ 'name' => $socialUser->getName(), 'email' => $socialUser->getEmail(), 'password' => bcrypt($password), 'avatar' => $socialUser->getAvatar(), 'email_verified_at' => now(), ]); $isNewUser = true; } Auth::login($user); $token = auth('api')->login($user); return response()->json([ 'status' => true, 'message' => 'User logged in successfully.', 'code' => 200, 'token_type' => 'bearer', 'token' => $token, 'expires_in' => auth('api')->factory()->getTTL() * 60, 'data' => $user, ],200); } else { return Helper::jsonResponse(false, 'Unauthorized', 401); } } catch (Exception $e) { return Helper::jsonResponse(false, 'Something went wrong', 500, ['error' => $e->getMessage()]); } } Create a route: Route::post('/social-login', [SocialLoginController::class, 'SocialLogin']);

To implement Sign in with Apple functionality in your Laravel REST API, you'll need to follow these steps:
-
Prerequisites
An Apple Developer account
A registered app in Apple Developer portal
Laravel 8.x or higher
PHP 7.4 or higher
-
Setup Apple Developer Configuration
Go to Apple Developer Portal
Create a new App ID with "Sign In with Apple" capability enabled
Note your Service ID (e.g., com.example.app)
Generate a private key for "Sign In with Apple" and download it
Install Required Packages
composer require laravel/socialite
- Configuration
Add these to your .env file:
APPLE_CLIENT_ID=nz.co.fskills.app
APPLE_TEAM_ID=J43F88Y4BH
APPLE_KEY_ID=CLU5NYTK5P
APPLE_PRIVATE_KEY_PATH=storage/apple_private_key.pem
Store the apple_private_key.pem in storage/apple_private_key.pem
-----BEGIN PRIVATE KEY-----
Eapmple key
-----END PRIVATE KEY-----
Create an Controller :
public function SocialLogin(Request $request): \Illuminate\Http\JsonResponse
{
$request->validate([
'token' => 'required',
'provider' => 'required|in:google,facebook,apple',
]);
try {
$provider = $request->provider;
$socialUser = Socialite::driver($provider)->stateless()->userFromToken($request->token);
//return response()->json($socialUser);
if ($socialUser) {
$user = User::withTrashed()->where('email', $socialUser->email)->first();
if (!empty($user->deleted_at)) {
return Helper::jsonErrorResponse('Your account has been deleted.',410);
}
$isNewUser = false;
if (!$user) {
$password = Str::random(16);
$user = User::create([
'name' => $socialUser->getName(),
'email' => $socialUser->getEmail(),
'password' => bcrypt($password),
'avatar' => $socialUser->getAvatar(),
'email_verified_at' => now(),
]);
$isNewUser = true;
}
Auth::login($user);
$token = auth('api')->login($user);
return response()->json([
'status' => true,
'message' => 'User logged in successfully.',
'code' => 200,
'token_type' => 'bearer',
'token' => $token,
'expires_in' => auth('api')->factory()->getTTL() * 60,
'data' => $user,
],200);
} else {
return Helper::jsonResponse(false, 'Unauthorized', 401);
}
} catch (Exception $e) {
return Helper::jsonResponse(false, 'Something went wrong', 500, ['error' => $e->getMessage()]);
}
}
Create a route:
Route::post('/social-login', [SocialLoginController::class, 'SocialLogin']);