mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-24 12:07:23 +08:00
oauth basic
This commit is contained in:
@@ -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()) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,4 +22,9 @@ class ToolController extends Controller
|
|||||||
return $this->success($result);
|
return $this->success($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test(Request $request)
|
||||||
|
{
|
||||||
|
dd($request->all());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -42,7 +42,8 @@ return [
|
|||||||
],
|
],
|
||||||
|
|
||||||
'api' => [
|
'api' => [
|
||||||
'driver' => 'token',
|
// 'driver' => 'token',
|
||||||
|
'driver' => 'passport',
|
||||||
'provider' => 'users',
|
'provider' => 'users',
|
||||||
'hash' => false,
|
'hash' => false,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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
@@ -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']);
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user