如何在 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
留言分享你的想法!
avatar-img
阿棋的沙龍
2會員
34內容數
有軟體開發相關文章。
阿棋的沙龍的其他內容
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/12
網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
2025/02/12
網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
看更多
你可能也想看
Thumbnail
你是不是也好奇:一個漂亮又好用的網站是怎麼做出來的,又或是他們背後的原理是什麼?聽過「前端」、「後端」和「資料庫」這些詞,但又不知道它們是什麼意思?別擔心!在這篇文章中,我會用簡單的方式帶你認識它們! 什麼是前端?(Frontend) 「前端」就是你在瀏覽器上看到和互動的部分,比如按鈕、圖片
Thumbnail
你是不是也好奇:一個漂亮又好用的網站是怎麼做出來的,又或是他們背後的原理是什麼?聽過「前端」、「後端」和「資料庫」這些詞,但又不知道它們是什麼意思?別擔心!在這篇文章中,我會用簡單的方式帶你認識它們! 什麼是前端?(Frontend) 「前端」就是你在瀏覽器上看到和互動的部分,比如按鈕、圖片
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
本篇純粹紀錄實作流程,以方便未來可以照此版繼續優化改進作法,這篇會使用Laravel 9版本並搭配Boostrap 5來做開發。 發現將每一次的實作作筆記,回頭再看的時候,就可以發現實作差異並進行改正,沒搞懂的底層操作也能在覆盤的時候理解,建議大家都要筆記自己的實作流程。
Thumbnail
本篇純粹紀錄實作流程,以方便未來可以照此版繼續優化改進作法,這篇會使用Laravel 9版本並搭配Boostrap 5來做開發。 發現將每一次的實作作筆記,回頭再看的時候,就可以發現實作差異並進行改正,沒搞懂的底層操作也能在覆盤的時候理解,建議大家都要筆記自己的實作流程。
Thumbnail
作為一個純後端,不會前端也是正常的事(誤),但該練習的技能線還是得每天練習一點,尤其我是一個前端小廢物,那既然要用Laravel 9 版本來做開發,那就得先試試看vite這個新的工具,基本上這邊就簡單介紹使用方式,另一篇在額外說明Laravel Mix 與 Vite 差別。
Thumbnail
作為一個純後端,不會前端也是正常的事(誤),但該練習的技能線還是得每天練習一點,尤其我是一個前端小廢物,那既然要用Laravel 9 版本來做開發,那就得先試試看vite這個新的工具,基本上這邊就簡單介紹使用方式,另一篇在額外說明Laravel Mix 與 Vite 差別。
Thumbnail
學習框架前第一步,先理解框架的生命週期 學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
Thumbnail
學習框架前第一步,先理解框架的生命週期 學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
Thumbnail
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
Thumbnail
建立middleware指令: 假設建立一個Test middleware: 新增的middleware檔案會在app/Http/Middleware路徑中。 註冊Middleware: Global Middleware: 2. Route Middleware route group用法如下:
Thumbnail
建立middleware指令: 假設建立一個Test middleware: 新增的middleware檔案會在app/Http/Middleware路徑中。 註冊Middleware: Global Middleware: 2. Route Middleware route group用法如下:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News