create temporary token for api authorization
This commit is contained in:
@@ -65,6 +65,8 @@ class HandleInertiaRequests extends Middleware
|
||||
}, $permissions);
|
||||
},
|
||||
'$menus' => fn () => $request->user()?->menus(),
|
||||
|
||||
'$token' => fn () => session('token'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
49
app/Listeners/CreateTemporaryToken.php
Normal file
49
app/Listeners/CreateTemporaryToken.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateTemporaryToken
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle($event)
|
||||
{
|
||||
$user = $event->user;
|
||||
|
||||
$temporaryToken = DB::table('temporary_tokens')
|
||||
->where('user_id', $user->id)
|
||||
->first();
|
||||
|
||||
if ($temporaryToken) {
|
||||
DB::table('personal_access_tokens')->delete($temporaryToken->token_id);
|
||||
}
|
||||
|
||||
$token = $user->createToken(uniqid());
|
||||
|
||||
DB::table('temporary_tokens')
|
||||
->insert([
|
||||
'user_id' => $user->id,
|
||||
'token_id' => $token->accessToken->id,
|
||||
]);
|
||||
|
||||
session()->put('token', $token->plainTextToken);
|
||||
}
|
||||
}
|
||||
39
app/Listeners/DeleteTemporaryToken.php
Normal file
39
app/Listeners/DeleteTemporaryToken.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DeleteTemporaryToken
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle($event)
|
||||
{
|
||||
$user = $event->user;
|
||||
|
||||
$temporaryToken = DB::table('temporary_tokens')->where('user_id', $user->id)->first();
|
||||
|
||||
if ($temporaryToken) {
|
||||
DB::table('personal_access_tokens')->delete($temporaryToken->token_id);
|
||||
}
|
||||
|
||||
session()->remove('token');
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Auth\Events\Login;
|
||||
use Illuminate\Auth\Events\Logout;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
@@ -21,8 +22,13 @@ class EventServiceProvider extends ServiceProvider
|
||||
],
|
||||
|
||||
Login::class => [
|
||||
\App\Listeners\CreateTemporaryToken::class,
|
||||
\App\Listeners\SaveUserLoginIpBrowserAndPlatform::class,
|
||||
],
|
||||
|
||||
Logout::class => [
|
||||
\App\Listeners\DeleteTemporaryToken::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('temporary_tokens', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('user_id')
|
||||
->unique();
|
||||
$table->unsignedBigInteger('token_id')
|
||||
->unique();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('user_id')
|
||||
->references('id')
|
||||
->on('users')
|
||||
->cascadeOnDelete();
|
||||
|
||||
$table->foreign('token_id')
|
||||
->references('id')
|
||||
->on('personal_access_tokens')
|
||||
->cascadeOnDelete();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('temporary_tokens');
|
||||
}
|
||||
};
|
||||
@@ -9,9 +9,13 @@ import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';
|
||||
import Themes from './themes'
|
||||
import Swal from 'sweetalert2';
|
||||
import { Inertia } from '@inertiajs/inertia';
|
||||
import axios from 'axios';
|
||||
|
||||
const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';
|
||||
|
||||
const { $token } = JSON.parse(document.getElementById('app').dataset.page).props
|
||||
axios.defaults.headers.common['Authorization'] = `Bearer ${$token}`
|
||||
|
||||
const can = (abilities) => {
|
||||
const { $permissions } = usePage().props.value
|
||||
|
||||
@@ -64,6 +68,17 @@ const Toast = Swal.mixin({
|
||||
}
|
||||
})
|
||||
|
||||
const authorization = () => {
|
||||
const { $token } = usePage().props.value
|
||||
|
||||
if ($token) {
|
||||
axios.defaults.headers.common['Authorization'] = `Bearer ${$token}`
|
||||
}
|
||||
}
|
||||
|
||||
Inertia.on('start', authorization)
|
||||
Inertia.on('finish', authorization)
|
||||
|
||||
window.Toast = Toast
|
||||
|
||||
Inertia.on('finish', () => {
|
||||
|
||||
@@ -14,7 +14,7 @@ use Illuminate\Support\Facades\Route;
|
||||
|
|
||||
*/
|
||||
|
||||
Route::prefix('/v1')->name('api.v1.')->group(function () {
|
||||
Route::prefix('/v1')->name('api.v1.')->middleware(['auth:sanctum'])->group(function () {
|
||||
Route::get('/user/{user}/menu', fn (App\Models\User $user) => $user->menus())->name('user.menu');
|
||||
|
||||
Route::name('superuser.')->group(function () {
|
||||
@@ -25,4 +25,6 @@ Route::prefix('/v1')->name('api.v1.')->group(function () {
|
||||
Route::post('/superuser/activity/login', [App\Http\Controllers\ActivityController::class, 'logins'])->name('activity.login');
|
||||
Route::get('/superuser/menu', [App\Http\Controllers\Superuser\MenuController::class, 'get'])->name('menu');
|
||||
});
|
||||
|
||||
Route::get('/user', fn () => request()->user());
|
||||
});
|
||||
Reference in New Issue
Block a user