Compare commits
2 Commits
e5516193b0
...
78597f1c68
| Author | SHA1 | Date | |
|---|---|---|---|
| 78597f1c68 | |||
| 588704642b |
@@ -93,3 +93,19 @@ trigger: always_on
|
|||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> 在執行 `open_browser_url` 或進行 E2E 測試時,請務必優先確認 Port 是否為 `8090`,以避免連線至錯誤的服務環境。
|
> 在執行 `open_browser_url` 或進行 E2E 測試時,請務必優先確認 Port 是否為 `8090`,以避免連線至錯誤的服務環境。
|
||||||
|
|
||||||
|
## 10. 環境與時區規範 (Environment & Timezone Standards)
|
||||||
|
|
||||||
|
### 10.1 時區與語系設定
|
||||||
|
* **預設時區**:必須設定為 `Asia/Taipei` (UTC+8)。
|
||||||
|
* **實作細節**:
|
||||||
|
* `.env`:必須包含 `APP_TIMEZONE=Asia/Taipei`。
|
||||||
|
* `config/app.php`:必須改為讀取環境變數 `env('APP_TIMEZONE', 'Asia/Taipei')`。
|
||||||
|
* **目的**:確保資料庫時間戳記與日誌紀錄與台灣當地時間完全一致。
|
||||||
|
|
||||||
|
### 10.2 開發慣例與效能優化
|
||||||
|
* **登入日誌機制**:
|
||||||
|
* 實作 **10 秒防重覆 (Debouncing)**:同一 IP 與帳號在 10 秒內的連續登入僅記錄一筆,以避免行動網路環境下的重複上報。
|
||||||
|
* **監聽器註冊**:嚴禁在多個 ServiceProvider 中重複註冊 `Login` 事件監聽器,應統一在 `EventServiceProvider` 中管理。
|
||||||
|
* **裝置識別**:
|
||||||
|
* 使用 `jenssegers/agent` 進行裝置偵測,並將 `device_type`, `browser`, `platform` 儲存於 `user_login_logs` 表。
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||||
<div>
|
<div>
|
||||||
<x-input-label for="name" :value="__('Name')" class="text-xs font-black text-slate-500 uppercase tracking-widest mb-2 ml-1" />
|
<x-input-label for="name" :value="__('Name')" class="text-xs font-black text-slate-500 uppercase tracking-widest mb-2 ml-1" />
|
||||||
<input id="name" name="name" type="text" class="py-3 px-4 block w-full border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-900 rounded-2xl text-sm font-bold text-slate-700 dark:text-slate-200 focus:ring-4 focus:ring-cyan-500/10 focus:border-cyan-500 transition-all outline-none" value="{{ old('name', $user->name) }}" required autofocus autocomplete="name" />
|
<input id="name" name="name" type="text" class="py-3 px-4 block w-full border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-900 rounded-2xl text-sm font-bold text-slate-700 dark:text-slate-200 focus:ring-4 focus:ring-cyan-500/10 focus:border-cyan-500 transition-all outline-none" value="{{ old('name', $user->name) }}" required autocomplete="name" />
|
||||||
<x-input-error class="mt-2" :messages="$errors->get('name')" />
|
<x-input-error class="mt-2" :messages="$errors->get('name')" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user