Skip to main content

什麼是認證

認證(Authentication)是確認發起存取的使用者「是誰」的機制。 在 Web 應用程式中,會透過登入表單接收電子郵件與密碼,若正確則將使用者資訊儲存到 Session。 後續請求會參照該 Session 來識別使用者。 Laravel 的認證功能由「Guard」與「Provider」兩個概念組成。
  • Guard:定義每個請求如何驗證使用者。預設是 session guard,使用 Session 與 Cookie 來管理狀態。
  • Provider:定義如何從資料庫取得使用者。預設使用 Eloquent。
認證的設定檔為 config/auth.php。預設設定即可對應大多數 Web 應用程式。

透過啟動套件加入認證

在 Laravel 中,只要在使用 laravel new 建立應用程式時選擇啟動套件,就能自動建構登入、註冊、密碼重設等認證功能。這是最推薦的方式。
1

建立應用程式

使用 Laravel 安裝器建立應用程式。過程中會出現選擇啟動套件的提示。
啟動套件可從 ReactVueLivewireSvelte 中選擇。 請依團隊的技術堆疊挑選。
2

安裝前端相依套件

3

準備資料庫

確認 .env 檔案的資料庫設定後,執行 migration。
會套用包含 users 表的初始 migration。
4

啟動開發伺服器

在瀏覽器開啟 http://localhost:8000,導覽列會顯示「Register」與「Log in」連結。 可以造訪 /register 註冊使用者試試看。
使用啟動套件後,以下功能可立即使用:
啟動套件產生的程式碼(Controller、Route、View)全部都存在於你自己的應用程式內,可以自由修改與客製化。

可用的啟動套件

React

可建構使用 React 19、TypeScript、Tailwind、shadcn/ui 的現代 SPA。 透過 Inertia,能在保有伺服器端路由的同時使用 React 前端。

Vue

採用 Vue Composition API、TypeScript、Tailwind、shadcn-vue。 與 React 同樣使用 Inertia 與伺服器端連動。

Livewire

使用僅靠 PHP 即可建構動態 UI 的 Livewire。 最適合以 Blade 模板為主的團隊,或希望不使用 JavaScript 框架的場合。 內含 Flux UI 元件庫。

Svelte

使用 Svelte 5、TypeScript、Tailwind、shadcn-svelte。 可與 Inertia 搭配建構現代 SPA。

認證 Facade

使用 Auth Facade 可取得目前已認證的使用者資訊,或確認認證狀態。

取得已認證的使用者

在 Controller 中也可以從 Request 物件取得使用者。

確認認證狀態

Auth::check() 會以 true / false 回傳使用者是否已登入。
在 Blade 模板中使用 @auth@guest 指令會很方便。

保護路由

要建立只有已登入使用者能存取的路由,可以使用 auth middleware。
未認證的使用者嘗試存取時,會自動被導向 /login 若要一次保護多條路由,可使用群組。
若忘記加上 auth middleware,未登入的使用者就會能夠存取。需要保護的路由請務必套用。

訪客專用路由

要將已登入的使用者重新導向,可使用 guest middleware。 將其套用在登入或註冊頁面,即可把已登入的使用者轉送至儀表板。

手動認證

若不使用啟動套件而想手動實作登入處理,可使用 Auth::attempt()
Auth::attempt() 的第 1 個參數傳入認證資訊陣列。 密碼會自動與雜湊值比對,因此請直接傳入明文。 若要實作「保持登入狀態」功能,於第 2 個參數傳入 true
即使自行實作手動認證,也建議參考啟動套件的程式碼。可將其當作安全實作的範本。

登出

要讓使用者登出,呼叫 Auth::logout()。 最佳做法是同時使 Session 失效並重新產生 CSRF Token。
路由請使用 POST 方法。
在 Blade 模板中使用表單送出 POST 請求。

總結

下一步

Middleware

詳細了解 auth middleware 的機制與自訂 middleware 的建立方式。
最後修改於 2026年8月2日