Advertisement
shinhosuck1973

register.js

Dec 21st, 2023
2,016
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState, useRef, useEffect } from 'react'
  2. import { Link, useNavigate } from 'react-router-dom'
  3. //import { userRegister } from '../api'
  4. //import { passwordCheck } from '../modules'
  5.  
  6.  
  7. export const passwordCheck = (password) => {
  8.     const upperChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')
  9.     const lowerChars = 'abcdefghijklmnopqrstuvwxyz'.split('')
  10.     const number = '0123456789'.split('')
  11.  
  12.     const upper = []
  13.     const lower = []
  14.     const num = []
  15.  
  16.     password.split('').forEach((i) => {
  17.         if(upperChars.includes(i)){
  18.             upper.push(i)
  19.         }else if(lowerChars.includes(i)){
  20.             lower.push(i)
  21.         }else if(number.includes(i)){
  22.             num.push(i)
  23.         }
  24.     })
  25.    if(upper.length > 0 && lower.length > 0 && num.length > 0) {
  26.     return true
  27.    }
  28.    return false
  29. }
  30.  
  31.  
  32. //const url = 'http://127.0.0.1:8000/register/'
  33.  
  34.  function UserRegister() {
  35.     const [data, setData] = useState({username: '', password: '', confirm: ''})
  36.     const [validated, setValidated] = useState(null)
  37.     const [submitBtnText, setSubmitBtnText] = useState('Register')
  38.     const [passwordMatch, setPasswordMatch] = useState(true)
  39.     //const [backendAuthError, setBackendAuthError] = useState('')
  40.     const [passwordContains, setPasswordContains] = useState(true)
  41.     const userName = useRef()
  42.     const navigate = useNavigate()
  43.  
  44.  
  45.     async function handleFormSubmit(e) {
  46.         e.preventDefault()
  47.         setValidated(null)
  48.         //setBackendAuthError('')
  49.         setPasswordMatch(true)
  50.         setPasswordContains(true)
  51.  
  52.         if(data.username && data.password && data.confirm){
  53.             if(data.password === data.confirm){
  54.                 // call passwordCheck function see if the password contains upper + lower + number
  55.                 if(passwordCheck(data.password)){
  56.                     setSubmitBtnText('Registering...')
  57.                     const body = {username:data.username, password:data.password}
  58.                     console.log(body)
  59.                    /* const response = await userRegister(url, body)
  60.                     if(response.message && response.message === 'successfully registered') {
  61.                         navigate(`/login/?message=${response.message}`, {replace:true})
  62.                     }else{
  63.                         const error = response[Object.keys(response).join('')]
  64.                         setBackendAuthError(error.join(''))
  65.                     }
  66.                     */
  67.                 }else {
  68.                     setPasswordContains(false)
  69.                 }
  70.                 setSubmitBtnText('Register')
  71.             }else{
  72.                 setPasswordMatch(false)
  73.             }
  74.         }else {
  75.             setValidated(
  76.                 {
  77.                     username:!data.username ? false : true,
  78.                     password:!data.password ? false : true,
  79.                     confirm:!data.confirm ? false : true
  80.                 }
  81.             )
  82.         }
  83.     }
  84.  
  85.     function handleChange(e) {
  86.         const { name, value } = e.target
  87.         setData((prev) => ({...prev, [name]:value}))
  88.     }
  89.    
  90.     useEffect(() => {
  91.         userName.current.focus()
  92.     }, [])
  93.  
  94.    
  95.     return (
  96.         <div className="main-container">
  97.             <div className='register-form-container' onSubmit={handleFormSubmit}>
  98.                 <h2 className='register-form-header'>Please Register</h2>
  99.                 { !passwordContains && <p className='form-register-input-error'>Password must contain upper and lower characters plus number</p>}
  100.                 { backendAuthError && <p className='form-register-input-error'>{backendAuthError}</p>}
  101.                 { !passwordMatch && <p className='form-register-input-error'>Password did not match</p>}
  102.                 <form className='register-form' action="">
  103.                     {validated && !validated.username && <p className='form-register-input-error'>This field is required!</p>}
  104.                     <input
  105.                         onChange={handleChange}
  106.                         className='register-form-input'
  107.                         type="text"
  108.                         value={data.username.replaceAll(' ', '')}
  109.                         name='username'
  110.                         placeholder='Username'
  111.                         ref={userName}
  112.                     />
  113.                     {validated && !validated.password && <p className='form-register-input-error'>This field is required!</p>}
  114.                     <input
  115.                         onChange={handleChange}
  116.                         className='register-form-input'
  117.                         type="password"
  118.                         value={data.password}
  119.                         name='password'
  120.                         placeholder='Password'
  121.                     />
  122.                     {validated && !validated.confirm && <p className='form-register-input-error'>This field is required!</p>}
  123.                     <input
  124.                         onChange={handleChange}
  125.                         className='register-form-input'
  126.                         type="password"
  127.                         value={data.confirm}
  128.                         name='confirm'
  129.                         placeholder='Password Confirmation'
  130.                     />
  131.                     <button className='register-form-submit-btn' disabled={submitBtnText==='Register'?false:true} type='submit'>{submitBtnText}</button>
  132.                 </form>
  133.                 <p className='register-form-already-registered'>Already Registered? <Link to='/login'>Login</Link></p>
  134.             </div>
  135.         </div>
  136.     )
  137. }
  138.  
  139. export default UserRegister
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement