如何在 Laravel 中設計登入功能(完整的後端與前端流程)

更新於 發佈於 閱讀時間約 11 分鐘

在現代 Web 應用中,實現用戶登入功能是非常基本且重要的步驟。本文將帶您了解如何在 Laravel 中構建一個完整的登入系統,涵蓋後端處理邏輯、前端表單設計以及相關的路由和中間件設定。這篇指南旨在幫助您建立一個簡潔且可擴展的登入流程。



1. 後端路由與控制器設置

在 Laravel 中,所有的路由配置都可以在 web.php 文件中進行設置,這樣我們就可以輕鬆控制用戶登入的流程。

web.php 路由設定

use App\Http\Controllers\Auth\AuthenticatedSessionController;
use Illuminate\Support\Facades\Route;

Route::prefix('admin')->middleware(['auth'])->group(function () {
// 登入後才可訪問的管理頁面
Route::get('/', function () {
return Inertia::render('Backend/Dashboard');
})->name('dashboard');
});

// 登入頁面路由,未登入者才可訪問
Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
Route::post('login', [AuthenticatedSessionController::class, 'store']);

在這裡,我們為登入頁面和登入請求設置了路由。需要注意的是,對於需要登入才能訪問的頁面,我們使用了 middleware(['auth']) 來限制訪問。


2. 創建登入表單:Vue 組件

接下來,我們需要在前端創建一個 Vue 組件來處理用戶登入表單。這裡我們將使用 Laravel Inertia.js 來構建前端與後端的協作。

Login.vue 登入頁面

<script setup>
const form = useForm({
email: '',
password: '',
remember: false,
});

const submit = () => {
form.post(route('login'), {
onFinish: () => form.reset('password'),
});
};
</script>

<template>
<form @submit.prevent="submit">
<input type="email" v-model="form.email" placeholder="Enter your email" required>
<input type="password" v-model="form.password" placeholder="Enter your password" required>
<label>
<input type="checkbox" v-model="form.remember">
Remember me
</label>
<button type="submit">Login</button>
</form>
</template>

在這個 Vue 組件中,我們使用了 useForm 來管理表單狀態,並將表單提交到 login 路由。使用 @submit.prevent="submit" 可以避免頁面刷新,並且觸發登入的請求。

小細節

  • 請記得將 <button> 元素的 type 設為 submit,這樣表單才能正常提交。
  • useForm 是 Laravel Inertia.js 中的一個很有用的工具,可以簡化表單處理的流程。


3. 認證控制器邏輯

在後端,我們需要創建一個控制器來處理登入請求和用戶的身份驗證。這裡我們將設計 AuthenticatedSessionController 控制器來實現這個功能。

AuthenticatedSessionController.php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Inertia\Inertia;
use Inertia\Response;

class AuthenticatedSessionController extends Controller
{
/**
* 顯示登入頁面
*/
public function create(): Response
{
return Inertia::render('Auth/Login', [
'canResetPassword' => Route::has('password.request'),
'status' => session('status'),
]);
}

/**
* 處理登入請求
*/
public function store(LoginRequest $request): RedirectResponse
{
// 確認信箱和密碼
$request->authenticate();

// 生成新的 session
$request->session()->regenerate();

// 重定向到用戶目標頁面
return redirect()->intended(RouteServiceProvider::HOME);
}
}

控制器功能解析

  • create() 方法:顯示登入頁面。
  • store() 方法:處理用戶的登入邏輯,包括驗證用戶的信箱與密碼,並且在登入成功後生成 session。

這裡的 authenticate() 是在 LoginRequest 類中定義的,它會確保用戶的帳號和密碼正確。


4. 數據庫與用戶模型設計

為了支持登入功能,需要一個 users 表來儲存用戶信息。這部分設置通常可以通過 Laravel 的 migration 機制來實現。

create_users_table.php Migration 文件

public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}

在這個 migration 中,我們設置了 emailpassword 字段來儲存用戶的登入信息,同時加入了 rememberToken 以支持記住我功能。


5. 後端管理路由及中間件設置

在您的管理後臺頁面中,您可能會希望只有經過認證的用戶才能進入。這就需要使用 auth 中間件來限制未登入的用戶訪問。

backend.php 管理後台路由

Route::prefix('admin')->middleware(['auth', 'verified'])->group(function () {
Route::get('/', function () {
return Inertia::render('Backend/Dashboard');
})->name('dashboard');
});

在這個例子中,我們為 admin 路由設置了 authverified 中間件,這樣只有經過身份驗證且已驗證 email 的用戶才能訪問管理頁面。


6. 總結

透過這些步驟,您可以在 Laravel 中構建一個完整的登入系統。從後端的路由設定、控制器邏輯,到前端的 Vue 表單設計,我們已經建立了一個強大且靈活的登入流程。

重點回顧:

  1. 後端認證邏輯:設計 AuthenticatedSessionController 處理用戶登入。
  2. 前端表單設計:使用 Vue 組件與 Inertia.js 來構建動態登入頁面。
  3. 數據庫設計:創建 users 表來存儲用戶的登入資訊。
  4. 後端路由與中間件:利用中間件確保用戶登入後才能訪問特定頁面。

這篇文章的步驟詳盡,涵蓋了 Laravel 登入功能的所有關鍵組件,您可以根據您的實際需求進行擴展或調整,從而構建出一個高效且安全的登入系統。接下來會介紹Middleware與Validate。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。

avatar-img
1會員
24內容數
有軟體開發相關文章。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿棋的沙龍 的其他內容
在開發 Web 應用時,管理大量資料通常需要處理分頁和格式化顯示的需求。本文將介紹如何在 Laravel 中實現 時間格式轉換 以及 分頁功能,並用實際案例來展示如何將這些功能整合到你的應用程式中。
在這篇文章中,我們將深入探討如何在 Laravel 應用程式中處理檔案上傳。我們將從前端頁面的檔案選擇到後端儲存與顯示檔案的完整流程,涵蓋從用戶選擇檔案,到將其上傳並保存在伺服器,直到如何在資料庫中儲存檔案路徑,並在頁面上顯示它們。這些步驟將有助於您瞭解如何在 Laravel 中高效地處理檔案上傳。
在這篇文章中,將介紹如何使用 Laravel 和 Vue 3,並搭配 Inertia.js 來建立一個簡單的電影資料管理系統。我們將涵蓋電影資料的新增、編輯、刪除等基本操作,並且實現動態更新頁面而不需重新載入。
在這篇文章中,將介紹如何使用 Laravel 與 Vue.js 構建一個具有良好使用體驗的 Web 應用。我們將討論如何組織 Laravel 路由與控制器,並展示如何在前端 Vue.js 中進行頁面切換和資料傳遞。
在現代 Web 開發中,前後端分離的架構越來越受歡迎。本文將帶領你從建立 Laravel 路由、將後端資料傳遞到前端,到如何使用 Tailwind CSS 美化頁面,並將資料儲存到資料庫。
這份指南提供了如何將 Vue.js 和 Laravel 進行集成的詳細步驟,並涵蓋了開發環境的設置、所需的工具、以及相關的安裝和配置方法。下面是步驟的概述與要點,對於有意使用這些技術的開發者將有很大幫助。
在開發 Web 應用時,管理大量資料通常需要處理分頁和格式化顯示的需求。本文將介紹如何在 Laravel 中實現 時間格式轉換 以及 分頁功能,並用實際案例來展示如何將這些功能整合到你的應用程式中。
在這篇文章中,我們將深入探討如何在 Laravel 應用程式中處理檔案上傳。我們將從前端頁面的檔案選擇到後端儲存與顯示檔案的完整流程,涵蓋從用戶選擇檔案,到將其上傳並保存在伺服器,直到如何在資料庫中儲存檔案路徑,並在頁面上顯示它們。這些步驟將有助於您瞭解如何在 Laravel 中高效地處理檔案上傳。
在這篇文章中,將介紹如何使用 Laravel 和 Vue 3,並搭配 Inertia.js 來建立一個簡單的電影資料管理系統。我們將涵蓋電影資料的新增、編輯、刪除等基本操作,並且實現動態更新頁面而不需重新載入。
在這篇文章中,將介紹如何使用 Laravel 與 Vue.js 構建一個具有良好使用體驗的 Web 應用。我們將討論如何組織 Laravel 路由與控制器,並展示如何在前端 Vue.js 中進行頁面切換和資料傳遞。
在現代 Web 開發中,前後端分離的架構越來越受歡迎。本文將帶領你從建立 Laravel 路由、將後端資料傳遞到前端,到如何使用 Tailwind CSS 美化頁面,並將資料儲存到資料庫。
這份指南提供了如何將 Vue.js 和 Laravel 進行集成的詳細步驟,並涵蓋了開發環境的設置、所需的工具、以及相關的安裝和配置方法。下面是步驟的概述與要點,對於有意使用這些技術的開發者將有很大幫助。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
先學習 HTML, CSS, JavaScript 基礎觀念, 再透過實作專案,慢慢熟悉不同的語法使用方式。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
可能包含敏感內容
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
前兩天,我們探討了「網站文章」的情境題;今明兩天,就讓我們探討另一個情境題「會員註冊」吧! 這邊我們同樣假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分,不過會多一個「註冊驗證信」的部分要實作與做測試驗證。 使用案例 使用者可填寫註冊資料後送出資料。 使用者可收到註冊驗證信
指令在現代 Laravel Web Applications 中,也是一個相當常見的應用,而 Laravel 也為此準備許多方便實現測試的函數,以下就來為大家介紹: artisan() 函數簽名: artisan($command, $parameters = []) 函數說明:這應該是指令測
前一篇我們介紹了在撰寫自動化測試時常使用的 Trait,今天則要來為大家介紹 Auth 相關測試可如何進行,同時為大家示範 RefreshDatabase 與 WithoutMiddleware 這兩個 Trait 的使用。 取得當前登入使用者資料 在以 Laravel 開發 Web 服務時,常
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
先學習 HTML, CSS, JavaScript 基礎觀念, 再透過實作專案,慢慢熟悉不同的語法使用方式。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
可能包含敏感內容
先說一下我的背景,非本科系從 2022/3 開始接觸到前端領域,在摸索過程中遇到六角學院,買了 HTML 和 CSS 課程從基礎學起。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
前兩天,我們探討了「網站文章」的情境題;今明兩天,就讓我們探討另一個情境題「會員註冊」吧! 這邊我們同樣假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分,不過會多一個「註冊驗證信」的部分要實作與做測試驗證。 使用案例 使用者可填寫註冊資料後送出資料。 使用者可收到註冊驗證信
指令在現代 Laravel Web Applications 中,也是一個相當常見的應用,而 Laravel 也為此準備許多方便實現測試的函數,以下就來為大家介紹: artisan() 函數簽名: artisan($command, $parameters = []) 函數說明:這應該是指令測
前一篇我們介紹了在撰寫自動化測試時常使用的 Trait,今天則要來為大家介紹 Auth 相關測試可如何進行,同時為大家示範 RefreshDatabase 與 WithoutMiddleware 這兩個 Trait 的使用。 取得當前登入使用者資料 在以 Laravel 開發 Web 服務時,常