Skip to content

Commit 3cfd9af

Browse files
authored
[6.x] Allow custom OAuth prompts (#397)
1 parent 8b48db6 commit 3cfd9af

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

composer.json

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"laravel/socialite": "^5.12"
2626
},
2727
"require-dev": {
28+
"inertiajs/inertia-laravel": "^2.0",
2829
"laravel/breeze": "^2.3",
2930
"laravel/jetstream": "^5.0",
3031
"laravel/sanctum": "^4.0",

src/Http/Controllers/OAuthController.php

+7-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
use Illuminate\Http\Request;
88
use Illuminate\Http\Response;
99
use Illuminate\Routing\Controller;
10-
use Illuminate\Support\Facades\Cache;
1110
use Illuminate\Support\Facades\Session;
1211
use Illuminate\Support\MessageBag;
1312
use Illuminate\Support\ViewErrorBag;
13+
use Inertia\Response as InertiaResponse;
1414
use JoelButcher\Socialstream\Contracts\AuthenticatesOAuthCallback;
1515
use JoelButcher\Socialstream\Contracts\GeneratesProviderRedirect;
1616
use JoelButcher\Socialstream\Contracts\HandlesInvalidState;
@@ -20,6 +20,7 @@
2020
use JoelButcher\Socialstream\Events\OAuthProviderLinkFailed;
2121
use JoelButcher\Socialstream\Http\Responses\OAuthProviderLinkFailedResponse;
2222
use JoelButcher\Socialstream\Providers;
23+
use JoelButcher\Socialstream\Socialstream;
2324
use Laravel\Jetstream\Jetstream;
2425
use Laravel\Socialite\Two\InvalidStateException;
2526
use Symfony\Component\HttpFoundation\RedirectResponse as SymfonyRedirectResponse;
@@ -71,8 +72,12 @@ public function callback(Request $request, string $provider): SocialstreamRespon
7172
/**
7273
* Show the oauth confirmation page.
7374
*/
74-
public function prompt(string $provider): View
75+
public function prompt(string $provider): View|InertiaResponse
7576
{
77+
if (Socialstream::$oAuthConfirmationPrompt) {
78+
return app(Socialstream::$oAuthConfirmationPrompt)($provider);
79+
}
80+
7681
return view('socialstream::oauth.prompt', [
7782
'provider' => $provider,
7883
]);

src/Socialstream.php

+19
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
namespace JoelButcher\Socialstream;
44

55
use Closure;
6+
use Illuminate\Contracts\View\View;
67
use Illuminate\Support\Str;
8+
use Inertia\Response;
79
use JoelButcher\Socialstream\Contracts\AuthenticatesOAuthCallback;
810
use JoelButcher\Socialstream\Contracts\CreatesConnectedAccounts;
911
use JoelButcher\Socialstream\Contracts\CreatesUserFromProvider;
@@ -54,6 +56,13 @@ class Socialstream
5456
*/
5557
public static array $refreshTokenResolvers = [];
5658

59+
/**
60+
* The callback that should be used to prompt the user to confirm their OAuth authorization.
61+
*
62+
* @var ?(Closure(string): (Response|View))
63+
*/
64+
public static ?Closure $oAuthConfirmationPrompt = null;
65+
5766
/**
5867
* Get the name of the user model used by the application.
5968
*/
@@ -390,4 +399,14 @@ public static function refreshConnectedAccountToken(ConnectedAccount $connectedA
390399

391400
return (new $callback)->refreshToken($connectedAccount);
392401
}
402+
403+
/**
404+
* Register a callback that should be used to prompt the user to confirm their OAuth.
405+
*
406+
* @param ?(callable(string): (Response|View)) $callback
407+
*/
408+
public static function promptOAuthLinkUsing(?callable $callback): void
409+
{
410+
self::$oAuthConfirmationPrompt = $callback ? $callback(...) : null;
411+
}
393412
}

stubs/breeze/inertia/app/Http/Controllers/ProfileController.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use Inertia\Inertia;
1212
use Inertia\Response;
1313

14-
class ProfileController extends Controller
14+
class ProfileController
1515
{
1616
/**
1717
* Display the user's profile form.

0 commit comments

Comments
 (0)