iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Modern Web

MERN Stack + Tailwind CSS - React 小專案實踐計畫系列 第 23

【Day 23】註冊 / 登入 Authentication(1) - 建立頁面

  • 分享至 

  • xImage
  •  

本來一直不太想碰這塊,想要直接混過去到30天結束,但後來還是覺得要有這個功能,專案才會更完整、後面幾天才有東西寫哈哈哈(喂

因為這部分我也沒有非常熟悉,所以一步一步慢慢試著做~

首先第一步當然是把註冊及登入的前端畫面刻出來:

https://ithelp.ithome.com.tw/upload/images/20221008/20152502KmhpNrzVz9.png

  • pages/ 新增 Login.jsRegister.js
  • App.js 新增 /login/register 路徑
  • Header.js 先新增前往登入頁面的按鈕(之後再回來修改 Header)

https://ithelp.ithome.com.tw/upload/images/20221008/20152502SfqPnF7yoj.png

然後建立頁面的樣式,與之前建立文章的頁面大略相同,不過這次輸入框的樣式改為左側有圖標 icon,如以下這樣:

  • 最外層用一個 <div> 包著,並使用 flex 讓內容呈橫列式排列
  • 左側 icon 放入 heroicon,並設定為 position absolute → absolute
  • <input> 寬和高設為 100%,然後 padding-left 留給左側 icon 位置
<div className="flex w-4/5 h-12 rounded-md mb-4">
    <EnvelopeIcon className="h-6 w-6 absolute ml-4 mt-3" />
    <input
        type="email"
        placeholder={'email'}
        value={email}
        maxLength={100}
        onChange={(e) => setEmail(e.target.value)}
        className="w-full h-full rounded-md bg-gray-50 pl-14 py-2 focus:outline-0 focus:bg-yellow-700/5"
    ></input>
</div>

最下方再加一行字,然後使用 <Link> 讓使用者能前往註冊頁面(或是從註冊頁面要前往登入頁面)

<div>
    還沒有帳號嗎?
    <span className="font-bold">
        <Link to={'/register'}>馬上註冊</Link>
    </span>
</div>

在輸入密碼相關的欄位,input 的 type 設定成 password(以點點代替文字顯示)

<input
    type="password"
    placeholder={'password'}
></input>

最後按下註冊按鈕時,在前端判斷 passwordpasswordConfirm 這兩個狀態變數的值是否相同,相同則執行送出,不相同則不執行並告訴使用者密碼不一致(或是也可以傳給後端核對,這次想說改成用前端檢查,個人感覺比較方便快速

const handleRegister = async () => {
	// 不相同
    if (password !== passwordConfirm) {
        alert('密碼不一致,請再確認一次');
        return;
    }
    // 相同
	// 執行註冊的api
};

目前登入及註冊頁面已大致建立完成,接下來就要來處理後端的 api ~


上一篇
【Day 22】調整檔案架構 - MVC
下一篇
【Day 24】註冊 / 登入 Authentication(2) - 處理後端驗證
系列文
MERN Stack + Tailwind CSS - React 小專案實踐計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言