110 lines
3.9 KiB
PHP
Raw Normal View History

2025-05-23 15:35:59 +08:00
<?php
use App\Livewire\Forms\LoginForm;
2025-09-02 11:10:44 +08:00
use Illuminate\Support\Facades\Http;
2025-05-23 15:35:59 +08:00
use Illuminate\Support\Facades\Session;
use Livewire\Attributes\Layout;
use Livewire\Volt\Component;
new #[Layout('layouts.guest')] class extends Component
{
public LoginForm $form;
/**
* Handle an incoming authentication request.
*/
public function login(): void
{
$this->validate();
2025-09-02 11:10:44 +08:00
//$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'],
'api_plain_token' => $token,
2025-09-02 11:10:44 +08:00
'created_at' => $userData['created_at'],
'updated_at' => $userData['updated_at'],
2025-09-02 11:10:44 +08:00
]
);
Auth::login($user, remember: true);
2025-05-23 15:35:59 +08:00
Session::regenerate();
$this->redirectIntended(default: route('welcome', absolute: false), navigate: true);
2025-05-23 15:35:59 +08:00
}
}; ?>
<div>
<!-- Session Status -->
<x-auth-session-status class="mb-4" :status="session('status')" />
<form wire:submit="login">
<!-- Email Address -->
<div>
<x-input-label for="email" :value="__('Email')" />
<x-text-input wire:model="form.email" id="email" class="block mt-1 w-full" type="email" name="email" required autofocus autocomplete="username" />
<x-input-error :messages="$errors->get('form.email')" class="mt-2" />
</div>
<!-- Password -->
<div class="mt-4">
<x-input-label for="password" :value="__('Password')" />
<x-text-input wire:model="form.password" id="password" class="block mt-1 w-full"
type="password"
name="password"
required autocomplete="current-password" />
<x-input-error :messages="$errors->get('form.password')" class="mt-2" />
</div>
<!-- Remember Me -->
<div class="block mt-4">
<label for="remember" class="inline-flex items-center">
<input wire:model="form.remember" id="remember" type="checkbox" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:ring-indigo-500" name="remember">
<span class="ms-2 text-sm text-gray-600">{{ __('Remember me') }}</span>
</label>
</div>
<div class="flex items-center justify-end mt-4">
@if (Route::has('password.request'))
<a class="underline text-sm text-gray-600 hover:text-gray-900 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" href="{{ route('password.request') }}" wire:navigate>
{{ __('Forgot your password?') }}
</a>
@endif
<x-primary-button class="ms-3">
{{ __('Log in') }}
</x-primary-button>
</div>
</form>
</div>