iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
Modern Web

使用 React + Node.js + MongoDB 打造電商網站系列 第 17

Day17 React 前端註冊與登入頁面 + JWT 儲存實作

  • 分享至 

  • xImage
  •  

今天是鐵人賽 Day17,目標是完成 React 前端註冊與登入頁面,並將 JWT 儲存到 localStorage,讓前端可以呼叫受保護 API。

1️⃣ 註冊頁面 (Register.jsx)
使用者可以輸入 帳號、信箱、密碼 完成註冊,送出表單後呼叫後端 /api/auth/register API,成功會顯示「註冊成功」,失敗則顯示錯誤訊息(例如帳號或信箱已被註冊)。

<form onSubmit={handleSubmit}>
  <input type="text" name="username" value={formData.username} onChange={handleChange} placeholder="帳號" required />
  <input type="email" name="email" value={formData.email} onChange={handleChange} placeholder="信箱" required />
  <input type="password" name="password" value={formData.password} onChange={handleChange} placeholder="密碼" required />
  <button type="submit">註冊</button>
</form>

https://ithelp.ithome.com.tw/upload/images/20250927/20178893tiJVf5Bl6F.png

2️⃣ 登入頁面 (Login.jsx)
使用者輸入 信箱 + 密碼 登入,登入成功後取得 JWT token 與使用者資訊,並存入 localStorage。登入成功會導向不同頁面:
role === "admin" → /admin
role === "user" → /user

const handleSubmit = async (e) => {
  e.preventDefault();
  const res = await axios.post("/api/auth/login", formData);
  setToken(res.data.token); // 存入 localStorage
  setUser(res.data.user);   // 存入 localStorage
  if (res.data.user.role === "admin") navigate("/admin");
  else navigate("/user");
};

https://ithelp.ithome.com.tw/upload/images/20250927/20178893ZyXdUUWvrX.png
https://ithelp.ithome.com.tw/upload/images/20250927/20178893Fu2ak2peYM.png

3️⃣ JWT 儲存與使用

已透過 utils/auth.js 封裝方法管理 token 與 user 資訊
未來可使用這個 token 呼叫後端受保護 API,例如取得會員資料或新增商品

export const setToken = (token) => localStorage.setItem("token", token);
export const getToken = () => localStorage.getItem("token");
export const setUser = (user) => localStorage.setItem("user", JSON.stringify(user));
export const getUser = () => JSON.parse(localStorage.getItem("user"));

4️⃣ 前端測試流程
註冊 → 顯示成功訊息
登入 → 取得 token,導向對應頁面
localStorage 可查看 token 與 user 資訊是否正確存入

🐛 遇到的問題與解決
表單驗證:加入 required 及前端訊息提示
JWT 存取:封裝 utils 方法統一管理 token 與 user
導向不同頁面:透過 role 判斷使用者身份

💡 Day17 收穫

  • 完成前端註冊與登入頁面
  • JWT 成功存入 localStorage,可用於後續 API 呼叫
  • 前端登入成功可導向不同頁面(admin/user)
  • 前端表單驗證與訊息提示已建立

上一篇
Day16 會員登入 API(JWT 驗證)與 Admin 權限控制
下一篇
Day18 會員/管理員登入後導向個人頁面(Profile)
系列文
使用 React + Node.js + MongoDB 打造電商網站19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言