oauth basic

This commit is contained in:
xiaomlove
2024-03-08 03:35:41 +08:00
parent e653fdac6d
commit 08ef14a420
9 changed files with 86 additions and 6 deletions
+4
View File
@@ -11,6 +11,7 @@ use Illuminate\Validation\UnauthorizedException;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable; use Throwable;
use Laravel\Passport\Exceptions\AuthenticationException as PassportAuthenticationException;
class Handler extends ExceptionHandler class Handler extends ExceptionHandler
{ {
@@ -48,6 +49,9 @@ class Handler extends ExceptionHandler
return abort(403); return abort(403);
} }
}); });
$this->renderable(function (PassportAuthenticationException $e) {
return response()->redirectTo(getSchemeAndHttpHost() . "/login.php");
});
//Other Only handle in json request //Other Only handle in json request
if (!request()->expectsJson()) { if (!request()->expectsJson()) {
+65
View File
@@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers;
use App\Http\Resources\UserResource;
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
{
private int $clientId = 3;
private string $baseUri;
public function __construct()
{
$this->baseUri = getSchemeAndHttpHost();
}
public function Redirect(Request $request)
{
$request->session()->put('state', $state = Str::random(40));
$query = http_build_query([
'client_id' => $this->clientId,
'redirect_uri' => $this->baseUri."/oauth/callback",
'response_type' => 'code',
'scope' => '',
'state' => $state,
'prompt' => 'none', // "none", "consent", or "login"
]);
return redirect($this->baseUri.'/oauth/authorize?'.$query);
}
public function Callback(Request $request)
{
// $state = $request->session()->pull('state');
//
// throw_unless(
// strlen($state) > 0 && $state === $request->state,
// \InvalidArgumentException::class
// );
$clientInfo = Client::query()->findOrFail($this->clientId);
$response = Http::asForm()->post($this->baseUri.'/oauth/token', [
'grant_type' => 'authorization_code',
'client_id' => $this->clientId,
'client_secret' => $clientInfo->secret,
'redirect_uri' => $this->baseUri.'/oauth/callback',
'code' => $request->code,
]);
return $response->json();
}
public function userInfo(): array
{
$user = Auth::user();
$resource = new UserResource($user);
return $this->success($resource);
}
}
+5
View File
@@ -22,4 +22,9 @@ class ToolController extends Controller
return $this->success($result); return $this->success($result);
} }
public function test(Request $request)
{
dd($request->all());
}
} }
+1 -1
View File
@@ -15,7 +15,7 @@ class Authenticate extends Middleware
protected function redirectTo($request) protected function redirectTo($request)
{ {
if (! $request->expectsJson()) { if (! $request->expectsJson()) {
return route('login'); return getBaseUrl() . '/login.php';
} }
} }
} }
+1 -1
View File
@@ -15,7 +15,7 @@ class NexusAuth extends Middleware
protected function redirectTo($request) protected function redirectTo($request)
{ {
if (! $request->expectsJson()) { if (! $request->expectsJson()) {
return getSchemeAndHttpHost() . '/login.php'; return getBaseUrl() . '/login.php';
} }
} }
} }
+1 -1
View File
@@ -17,6 +17,7 @@ class UserResource extends JsonResource
$out = [ $out = [
'id' => $this->id, 'id' => $this->id,
'username' => $this->username, 'username' => $this->username,
'email' => $this->email,
'status' => $this->status, 'status' => $this->status,
'enabled' => $this->enabled, 'enabled' => $this->enabled,
'added' => format_datetime($this->added), 'added' => format_datetime($this->added),
@@ -40,7 +41,6 @@ class UserResource extends JsonResource
'valid_medals' => MedalResource::collection($this->whenLoaded('valid_medals')), 'valid_medals' => MedalResource::collection($this->whenLoaded('valid_medals')),
]; ];
if ($request->routeIs('user.me')) { if ($request->routeIs('user.me')) {
$out['email'] = $this->email;
$out['downloaded_human'] = mksize($this->downloaded); $out['downloaded_human'] = mksize($this->downloaded);
$out['uploaded_human'] = mksize($this->uploaded); $out['uploaded_human'] = mksize($this->uploaded);
$out['seed_time'] = mkprettytime($this->seedtime); $out['seed_time'] = mkprettytime($this->seedtime);
+2 -1
View File
@@ -42,7 +42,8 @@ return [
], ],
'api' => [ 'api' => [
'driver' => 'token', // 'driver' => 'token',
'driver' => 'passport',
'provider' => 'users', 'provider' => 'users',
'hash' => false, 'hash' => false,
], ],
+1 -1
View File
@@ -1,6 +1,6 @@
<?php <?php
defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.8.9'); defined('VERSION_NUMBER') || define('VERSION_NUMBER', '1.8.9');
defined('RELEASE_DATE') || define('RELEASE_DATE', '2024-03-01'); defined('RELEASE_DATE') || define('RELEASE_DATE', '2024-03-08');
defined('IN_TRACKER') || define('IN_TRACKER', false); defined('IN_TRACKER') || define('IN_TRACKER', false);
defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP"); defined('PROJECTNAME') || define("PROJECTNAME","NexusPHP");
defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org"); defined('NEXUSPHPURL') || define("NEXUSPHPURL","https://nexusphp.org");
+6 -1
View File
@@ -30,5 +30,10 @@ if (!isRunningInConsole()) {
} }
} }
Route::get('test', [\App\Http\Controllers\ToolController::class, 'test'])->middleware(['web']);
Route::group(['prefix' => 'oauth'], function () {
Route::get("user-info", [\App\Http\Controllers\OauthController::class, 'userInfo'])->name("oauth.user_info")->middleware('auth:api');
// Route::get('redirect', [\App\Http\Controllers\OauthController::class, 'Redirect']);
// Route::get('callback', [\App\Http\Controllers\OauthController::class, 'Callback']);
});