202509021110
使用後台驗証帳號
This commit is contained in:
parent
40fbeb6a63
commit
d7854a9905
36
app/Http/Middleware/ApiTokenMiddleware.php
Normal file
36
app/Http/Middleware/ApiTokenMiddleware.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use App\Models\User; // 如果你的 Token 存在 user table
|
||||||
|
|
||||||
|
class ApiTokenMiddleware
|
||||||
|
{
|
||||||
|
public function handle(Request $request, Closure $next)
|
||||||
|
{
|
||||||
|
$token = $request->bearerToken();
|
||||||
|
if (!$token) {
|
||||||
|
return response()->json(['error' => 'Missing token'], 401);
|
||||||
|
}
|
||||||
|
$response = Http::withToken($token)
|
||||||
|
->withOptions(['verify' => false])
|
||||||
|
->post('https://ktv.test/api/token/validate');
|
||||||
|
|
||||||
|
if ($response->failed() || !$response->json('valid')) {
|
||||||
|
return response()->json(['error' => 'Invalid token'], 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$user = User::where('api_plain_token', $token)->first();
|
||||||
|
if (!$user) {
|
||||||
|
return response()->json(['message' => 'Invalid token'], 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$request->setUserResolver(fn() => $user);
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
|||||||
)
|
)
|
||||||
->withMiddleware(function (Middleware $middleware) {
|
->withMiddleware(function (Middleware $middleware) {
|
||||||
$middleware->alias([
|
$middleware->alias([
|
||||||
|
'api_token' => \App\Http\Middleware\ApiTokenMiddleware::class,
|
||||||
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
|
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
|
||||||
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
|
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
|
||||||
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class
|
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class
|
||||||
|
@ -35,4 +35,8 @@ return [
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'backend' => [
|
||||||
|
'url' => env('BACKEND_URL'),
|
||||||
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Livewire\Forms\LoginForm;
|
use App\Livewire\Forms\LoginForm;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Session;
|
use Illuminate\Support\Facades\Session;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Volt\Component;
|
||||||
@ -16,7 +17,43 @@ new #[Layout('layouts.guest')] class extends Component
|
|||||||
{
|
{
|
||||||
$this->validate();
|
$this->validate();
|
||||||
|
|
||||||
$this->form->authenticate();
|
//$this->form->authenticate();
|
||||||
|
// 呼叫遠端 API 驗證帳號密碼
|
||||||
|
$response = Http::withOptions(['verify' => false])
|
||||||
|
->post(config('services.backend.url').'/api/login', [
|
||||||
|
'email' => $this->form->email,
|
||||||
|
'password' => $this->form->password,
|
||||||
|
]);
|
||||||
|
if ($response->failed()) {
|
||||||
|
throw \Illuminate\Validation\ValidationException::withMessages([
|
||||||
|
'email' => '登入失敗,請檢查帳號或密碼。',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $response->json("data");
|
||||||
|
|
||||||
|
// 假設遠端回傳 token + user profile
|
||||||
|
$token = $data['token'];
|
||||||
|
$userData = $data['user'];
|
||||||
|
|
||||||
|
// 在本地建立/更新使用者
|
||||||
|
$user = \App\Models\User::updateOrCreate(
|
||||||
|
[ 'id' => $userData['id']],
|
||||||
|
[
|
||||||
|
'name' => $userData['name'],
|
||||||
|
'email' => $userData['email'],
|
||||||
|
'phone' => $userData['phone'],
|
||||||
|
'birthday' => $userData['birthday'],
|
||||||
|
'gender' => $userData['gender'],
|
||||||
|
'status' => $userData['status'],
|
||||||
|
'email_verified_at' => $userData['email_verified_at'],
|
||||||
|
'created_at' => $userData['created_at'],
|
||||||
|
'updated_at' => $userData['updated_at'],
|
||||||
|
'api_token' => $token,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
Auth::login($user, remember: true);
|
||||||
|
|
||||||
Session::regenerate();
|
Session::regenerate();
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Http\Controllers\ArtistController;
|
|
||||||
use App\Http\Controllers\AuthController;
|
use App\Http\Controllers\AuthController;
|
||||||
use App\Http\Controllers\RoomControlController;
|
use App\Http\Controllers\RoomControlController;
|
||||||
use App\Http\Controllers\Api\RoomSongController;
|
use App\Http\Controllers\Api\RoomSongController;
|
||||||
@ -9,7 +8,8 @@ use App\Http\Controllers\SqliteUploadController;
|
|||||||
|
|
||||||
Route::post('/room/receiveRegister', [RoomControlController::class, 'receiveRegister']);
|
Route::post('/room/receiveRegister', [RoomControlController::class, 'receiveRegister']);
|
||||||
|
|
||||||
Route::middleware('auth:sanctum')->group(function () {
|
//Route::middleware('auth:sanctum')->group(function () {
|
||||||
|
Route::middleware('api_token')->group(function () {
|
||||||
Route::get('/profile', [AuthController::class, 'profile']);
|
Route::get('/profile', [AuthController::class, 'profile']);
|
||||||
Route::post('/room/sendSwitch', [RoomControlController::class, 'sendSwitch']);
|
Route::post('/room/sendSwitch', [RoomControlController::class, 'sendSwitch']);
|
||||||
Route::post('/room/heartbeat', [RoomControlController::class, 'HeartBeat']);
|
Route::post('/room/heartbeat', [RoomControlController::class, 'HeartBeat']);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user