What is the process to Sign In with Apple with laravel?
Al-Amin Islam
Posted on September 11, 2024
The Sign In with Apple Flow . How Sign In with Apple Works (Hint: it uses OAuth and OIDC) .
Today I will try to show how to login with apple.
No.1
Mandatory Check this url If you click on this URL, you can see how to create Apple's service.
Create Apple Service on Apple developer Account
No.2
You need to install laravel socialite package on your project
composer require laravel/socialite
Then you will need to install apple socialiteproviders . Check this url Apple SocialiteProviders.
You need some configuration on your laravel projects
config/services.php
thats have provide . Apple SocialiteProviders.
Note
If it doesn't work you just need to add some others field which will get you from apple service developer account.
'apple' => [
'client_id' => env('APPLE_CLIENT_ID'),
'client_secret' => env('APPLE_CLIENT_SECRET'),
'team_id' => env('APPLE_TEAM_ID'),
'key_id' => env('APPLE_KEY_ID'),
'private_key' => str_replace('\\n', "\n", env('APPLE_PRIVATE_KEY')),
'redirect' => env('APPLE_REDIRECT_URL'),
],
your laravel .env file looks like
APPLE_CLIENT_ID='xxxxxxxxx'
APPLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n token \n-----END PRIVATE KEY-----"
APPLE_TEAM_ID="xxxxxx"
APPLE_KEY_ID="xxxxxxxx"
APPLE_CLIENT_SECRET="xxxxxxxxxx"
APPLE_REDIRECT_URL="http://127.0.0.1:8000/auth/login/apple/callback"
APPLE_REDIRECT_URI="http://127.0.0.1:8000/auth/login/apple/callback"
..........
No. 3
Now you need to create a Apple secret which is very important for Apple login. For creating Apple secret you can following this website . Generate Apple token . For generate JWT token you will need to install this package .
composer require lcobucci/jwt
Now you are ready for creating route in socialite login.
Route::get('login/apple',[SocialController::class,'redirectToProvider'])->name('redirectToProvider');
Route::post('login/apple/callback',[SocialController::class,'handleProviderCallback'])->name('handleProviderCallback');
Inside the controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use Illuminate\Support\Facades\Log;
class SocialController extends Controller
{
public function redirectToProvider()
{
Log::info("apple");
return Socialite::driver('apple')->redirect();
}
public function handleProviderCallback()
{
try {
$user = Socialite::driver('apple')->stateless()->user();
} catch (\Exception $e) {
return redirect()->route('login')->with('error', 'Failed to log in with Apple.');
}
$provider_id = $user->getId();
$email = $user->getEmail() ?? 'no-email-provided';
$existingUser = User::where('provider_id', $provider_id)->orWhere('email', $email)->first();
if ($existingUser) {
auth()->login($existingUser);
} else {
$newUser = User::create([
'name' => $user->getName() ?? 'Apple User',
'email' => $email,
'provider_id' => $provider_id,
'provider_name' => 'apple'
]);
auth()->login($newUser);
}
// If it's a mobile app, generate and redirect with a token
$token = auth()->user()->createToken('authToken')->accessToken;
return $token;
}
}
I hope this will works . If you can face any problem on it feel free to knock me Email
alamincsetpi@gmail.com
or you can comment in this below.
Thanks🤪
Happy coding❤️🤪
Posted on September 11, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.