Files
nexusphp/app/Http/Controllers/OauthController.php

75 lines
2.0 KiB
PHP
Raw Normal View History

2024-03-08 03:35:41 +08:00
<?php
namespace App\Http\Controllers;
use App\Http\Resources\UserResource;
2024-04-06 03:13:23 +08:00
use App\Models\OauthClient;
2024-03-08 03:35:41 +08:00
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Http;
use Laravel\Passport\Client;
class OauthController extends Controller
{
2024-04-06 03:13:23 +08:00
private int $clientId = 8;
2024-03-08 03:35:41 +08:00
private string $baseUri;
2024-04-06 03:13:23 +08:00
private ?OauthClient $client = null;
// public function __construct()
// {
// $this->baseUri = getSchemeAndHttpHost();
//
// $this->client = OauthClient::query()->find($this->clientId);
// }
public function redirect(Request $request)
2024-03-08 03:35:41 +08:00
{
2024-04-06 03:13:23 +08:00
// $request->session()->put('state', $state = Str::random(40));
2024-03-08 03:35:41 +08:00
$query = http_build_query([
2024-04-06 03:13:23 +08:00
'client_id' => $this->client->id,
'redirect_uri' => $this->client->redirect,
2024-03-08 03:35:41 +08:00
'response_type' => 'code',
'scope' => '',
2024-04-06 03:13:23 +08:00
// 'state' => $state,
// 'prompt' => 'none', // "none", "consent", or "login"
2024-03-08 03:35:41 +08:00
]);
return redirect($this->baseUri.'/oauth/authorize?'.$query);
}
2024-04-06 03:13:23 +08:00
public function callback(Request $request)
2024-03-08 03:35:41 +08:00
{
// $state = $request->session()->pull('state');
//
// throw_unless(
// strlen($state) > 0 && $state === $request->state,
// \InvalidArgumentException::class
// );
$response = Http::asForm()->post($this->baseUri.'/oauth/token', [
'grant_type' => 'authorization_code',
2024-04-06 03:13:23 +08:00
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'redirect_uri' => $this->client->redirect,
2024-03-08 03:35:41 +08:00
'code' => $request->code,
]);
return $response->json();
}
2024-04-06 03:13:23 +08:00
public function debug(Request $request)
{
dd($request->all());
}
2024-03-08 03:35:41 +08:00
public function userInfo(): array
{
$user = Auth::user();
$resource = new UserResource($user);
2024-04-06 03:13:23 +08:00
return $resource->response()->getData(true)['data'];
2024-03-08 03:35:41 +08:00
}
}