create temporary token for api authorization
This commit is contained in:
@@ -65,6 +65,8 @@ class HandleInertiaRequests extends Middleware
|
|||||||
}, $permissions);
|
}, $permissions);
|
||||||
},
|
},
|
||||||
'$menus' => fn () => $request->user()?->menus(),
|
'$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;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Auth\Events\Login;
|
use Illuminate\Auth\Events\Login;
|
||||||
|
use Illuminate\Auth\Events\Logout;
|
||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
@@ -21,8 +22,13 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
],
|
],
|
||||||
|
|
||||||
Login::class => [
|
Login::class => [
|
||||||
|
\App\Listeners\CreateTemporaryToken::class,
|
||||||
\App\Listeners\SaveUserLoginIpBrowserAndPlatform::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 Themes from './themes'
|
||||||
import Swal from 'sweetalert2';
|
import Swal from 'sweetalert2';
|
||||||
import { Inertia } from '@inertiajs/inertia';
|
import { Inertia } from '@inertiajs/inertia';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';
|
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 can = (abilities) => {
|
||||||
const { $permissions } = usePage().props.value
|
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
|
window.Toast = Toast
|
||||||
|
|
||||||
Inertia.on('finish', () => {
|
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::get('/user/{user}/menu', fn (App\Models\User $user) => $user->menus())->name('user.menu');
|
||||||
|
|
||||||
Route::name('superuser.')->group(function () {
|
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::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('/superuser/menu', [App\Http\Controllers\Superuser\MenuController::class, 'get'])->name('menu');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::get('/user', fn () => request()->user());
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user