11import { createFileRoute , useNavigate , useRouterState } from '@tanstack/react-router' ;
2- import { useEffect , useState } from 'react' ;
2+ import { useEffect , useRef , useState } from 'react' ;
33import zxcvbn from 'zxcvbn' ; //記得要先安裝zxcvbn,輸入 npm install zxcvbn
44import UserController from '../backend/user/Controllers/UserController' ;
55import UserSignupData from '../backend/user/Entities/UserSignupData' ;
@@ -11,6 +11,7 @@ function SignUpPage() {
1111 const navigate = useNavigate ( ) ;
1212 const state = useRouterState ( { select : ( s ) => s . location . state } )
1313 const [ userData , setUserData ] = useState < UserInfo > ( )
14+
1415 useEffect ( ( ) => {
1516 if ( ! state . post ?. userData ) {
1617 navigate ( { to : '/' } )
@@ -46,6 +47,7 @@ function SignUpForm({ userInfo, navigate }: { userInfo: UserInfo; navigate: Retu
4647 nickname : '' ,
4748 password : '' ,
4849 } )
50+ const passwordCRef = useRef < HTMLInputElement > ( null ) ;
4951
5052 const [ passwordStrength , setPasswordStrength ] = useState ( 0 )
5153
@@ -95,6 +97,11 @@ function SignUpForm({ userInfo, navigate }: { userInfo: UserInfo; navigate: Retu
9597 return
9698 }
9799
100+ if ( passwordCRef . current && passwordCRef . current . value !== formData . password ) {
101+ alert ( '兩次輸入的密碼不一致' ) ;
102+ return ;
103+ }
104+
98105 console . log ( 'Submitted Data:' , {
99106 nickname : trimmedNickname ,
100107 password : formData . password ,
@@ -227,7 +234,6 @@ function SignUpForm({ userInfo, navigate }: { userInfo: UserInfo; navigate: Retu
227234 id = "nickname"
228235 value = { formData . nickname }
229236 onChange = { handleChange }
230- required
231237 className = "mt-2 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-600 focus:ring-indigo-600 sm:text-sm"
232238 placeholder = "Enter your nickname"
233239 />
@@ -249,12 +255,27 @@ function SignUpForm({ userInfo, navigate }: { userInfo: UserInfo; navigate: Retu
249255 handleChange ( e )
250256 passwordCheck ( e )
251257 } }
252- required
253258 className = "mt-2 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-600 focus:ring-indigo-600 sm:text-sm"
254259 placeholder = "Enter your password"
255260 />
256261 </ div >
257-
262+
263+ < div >
264+ < label
265+ htmlFor = "passwordC"
266+ className = "block text-sm font-medium text-gray-900"
267+ >
268+ 確認密碼
269+ </ label >
270+ < input
271+ type = "password"
272+ ref = { passwordCRef }
273+ id = "passwordC"
274+ className = "mt-2 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-600 focus:ring-indigo-600 sm:text-sm"
275+ placeholder = "Enter your password again"
276+ />
277+ </ div >
278+
258279 < div className = "mt-2 w-full h-3 bg-gray-200 rounded-full" >
259280 < div
260281 className = { `h-full rounded-full ${ strengthColors [ passwordStrength ] } ` }
0 commit comments