110 lines
3.9 KiB
PHP
110 lines
3.9 KiB
PHP
<?php
|
|
|
|
use App\Livewire\Forms\LoginForm;
|
|
use Illuminate\Support\Facades\Http;
|
|
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();
|
|
|
|
//$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,
|
|
'created_at' => $userData['created_at'],
|
|
'updated_at' => $userData['updated_at'],
|
|
|
|
]
|
|
);
|
|
|
|
Auth::login($user, remember: true);
|
|
|
|
Session::regenerate();
|
|
|
|
$this->redirectIntended(default: route('welcome', absolute: false), navigate: true);
|
|
}
|
|
}; ?>
|
|
|
|
<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>
|