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) {
|
||||
$middleware->alias([
|
||||
'api_token' => \App\Http\Middleware\ApiTokenMiddleware::class,
|
||||
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
|
||||
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
|
||||
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class
|
||||
|
@ -35,4 +35,8 @@ return [
|
||||
],
|
||||
],
|
||||
|
||||
'backend' => [
|
||||
'url' => env('BACKEND_URL'),
|
||||
],
|
||||
|
||||
];
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Livewire\Forms\LoginForm;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
@ -16,7 +17,43 @@ new #[Layout('layouts.guest')] class extends Component
|
||||
{
|
||||
$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();
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\ArtistController;
|
||||
use App\Http\Controllers\AuthController;
|
||||
use App\Http\Controllers\RoomControlController;
|
||||
use App\Http\Controllers\Api\RoomSongController;
|
||||
@ -9,7 +8,8 @@ use App\Http\Controllers\SqliteUploadController;
|
||||
|
||||
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::post('/room/sendSwitch', [RoomControlController::class, 'sendSwitch']);
|
||||
Route::post('/room/heartbeat', [RoomControlController::class, 'HeartBeat']);
|
||||
|
Loading…
x
Reference in New Issue
Block a user