1
1
// React & React Router Modules
2
2
import axios from 'axios' ;
3
3
import React , { useState } from 'react' ;
4
+ import useCredentialsStore from '../store/credentialsStore' ;
4
5
import { handleOAuthLogin } from '../utils/getGoogleUrl' ;
5
6
import googleImg from '../../src/assets/GoogleImage.png' ;
6
7
import gitHubImage from '../../src/assets/GithubImage.png' ;
7
8
import { NavLink , useNavigate } from 'react-router-dom' ;
8
9
9
10
/* "Signup" Component - signup page for user creation */
10
11
export default function Signup ( ) {
12
+ const { setUser } = useCredentialsStore ( ) ;
11
13
const [ emailErr , setEmailErr ] = useState ( false ) ;
12
14
const navigate = useNavigate ( ) ;
15
+
16
+ const LoginUser = async ( regInfo : { email : string ; password : string } ) => {
17
+ const { email, password } = regInfo ;
18
+ await axios
19
+ . post (
20
+ '/api/verifyUser' ,
21
+ { email, password } ,
22
+ {
23
+ withCredentials : true ,
24
+ }
25
+ )
26
+ . then ( ( res ) => {
27
+ setUser ( res . data ) ;
28
+ navigate ( '/display' ) ;
29
+ } )
30
+ . catch ( ( err ) => {
31
+ // if somehow there's an error that wasn't caught when registering?
32
+ console . log ( 'Error logging user in after registering.' ) ;
33
+ } ) ;
34
+ } ;
35
+
13
36
//Regular login using JWTs without OAuth
14
37
const registerAccount = async ( e : React . FormEvent ) => {
15
38
e . preventDefault ( ) ;
@@ -20,7 +43,10 @@ export default function Signup() {
20
43
const password = formValues [ 2 ] . value ;
21
44
await axios
22
45
. post ( '/api/userRegistration' , { full_name, email, password } )
23
- . then ( ( ) => navigate ( '/' ) )
46
+ . then ( ( res ) => {
47
+ const registerData = { email : res . data . email , password : password } ;
48
+ LoginUser ( registerData ) ;
49
+ } )
24
50
. catch ( ( err ) => {
25
51
const emailInput = document . querySelector ( '#email' ) as HTMLElement ;
26
52
setEmailErr ( true ) ;
@@ -29,89 +55,103 @@ export default function Signup() {
29
55
} ;
30
56
31
57
return (
32
- < div className = "Content mx-auto mt-20 w-96 h-96 grid max-w-screen-md place-items-center gap-8" >
33
- < div className = "Header self-stretch h-9 flex-col justify-start items-center gap-6 flex " >
34
- < div className = "TextAndSupportingText self-stretch h-9 flex-col justify -start items -start gap-3 flex " >
35
- < div className = "Text self-stretch text-center text-white text- 3xl font-semibold leading-9" >
36
- Create an account
58
+ < div className = "Content mx-auto mt-20 grid h-96 w-96 max-w-screen-md place-items-center gap-8" >
59
+ < div className = "Header flex h-9 flex-col items-center justify-start gap-6 self-stretch " >
60
+ < div className = "TextAndSupportingText flex h-9 flex-col items -start justify -start gap-3 self-stretch " >
61
+ < div className = "Text self-stretch text-center text-3xl font-semibold leading-9 text-white " >
62
+ Create an account
37
63
</ div >
38
64
< div className = "SupportingText self-stretch text-center text-base font-normal leading-normal dark:text-white" >
39
65
Welcome! Please register to continue.
40
66
</ div >
67
+ </ div >
41
68
</ div >
42
- </ div >
43
- < div className = "Content self-stretch h-70 rounded-xl flex-col justify-start items-center gap-6 flex" >
44
- < form className = "Form self-stretch h-50 flex-col justify-start items-start gap-4 flex"
45
- onSubmit = { ( e ) => registerAccount ( e ) }
46
- >
47
- < div className = "InputField self-stretch h-11 flex-col justify-start items-start flex" >
48
- < div className = "InputFieldBase self-stretch h-11 flex-col justify-start items-start gap-1.5 flex" >
49
- < div className = "InputWithLabel self-stretch h-11 flex-col justify-start items-start gap-1.5 flex" >
50
- < div className = "Input self-stretch px-3.5 py-2.5 bg-white rounded-lg shadow border border-gray-300 justify-start items-center gap-2 inline-flex" >
51
- < div className = "Content grow shrink basis-0 h-6 justify-start items-center gap-2 flex" >
52
- < input
53
- placeholder = "Enter your full name"
54
- className = "Text grow shrink basis-0 text-gray-500 text-base font-normal leading-normal"
55
- name = "full_name"
56
- required
57
- />
69
+ < div className = "Content h-70 flex flex-col items-center justify-start gap-6 self-stretch rounded-xl" >
70
+ < form
71
+ className = "Form h-50 flex flex-col items-start justify-start gap-4 self-stretch"
72
+ onSubmit = { ( e ) => registerAccount ( e ) }
73
+ >
74
+ < div className = "InputField flex h-11 flex-col items-start justify-start self-stretch" >
75
+ < div className = "InputFieldBase flex h-11 flex-col items-start justify-start gap-1.5 self-stretch" >
76
+ < div className = "InputWithLabel flex h-11 flex-col items-start justify-start gap-1.5 self-stretch" >
77
+ < div className = "Input inline-flex items-center justify-start gap-2 self-stretch rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 shadow" >
78
+ < div className = "Content flex h-6 shrink grow basis-0 items-center justify-start gap-2" >
79
+ < input
80
+ placeholder = "Enter your full name"
81
+ className = "Text shrink grow basis-0 text-base font-normal leading-normal text-gray-500"
82
+ name = "full_name"
83
+ required
84
+ />
85
+ </ div >
58
86
</ div >
59
87
</ div >
60
88
</ div >
61
89
</ div >
62
- </ div >
63
- < div className = "InputWithLabel self-stretch h-11 flex-col justify-start items-start gap-1.5 flex" >
64
- < div className = { `Input self-stretch px-3.5 py-2.5 bg-white rounded-lg shadow border ${ ! emailErr ? 'border-gray-300' : 'border-red-500' } justify-start items-center gap-2 inline-flex` } >
65
- < div className = "Content grow shrink basis-0 h-6 justify-start items-center gap-2 flex" >
66
- < input
67
- placeholder = "Enter your email"
68
- className = "Text grow shrink basis-0 focus:border-indigo-500 text-gray-500 text-base font-normal leading-normal"
69
- type = "email"
70
- name = "email"
71
- required
72
- />
90
+ < div className = "InputWithLabel flex h-11 flex-col items-start justify-start gap-1.5 self-stretch" >
91
+ < div
92
+ className = { `Input self-stretch rounded-lg border bg-white px-3.5 py-2.5 shadow ${
93
+ ! emailErr ? 'border-gray-300' : 'border-red-500'
94
+ } inline-flex items-center justify-start gap-2`}
95
+ >
96
+ < div className = "Content flex h-6 shrink grow basis-0 items-center justify-start gap-2" >
97
+ < input
98
+ placeholder = "Enter your email"
99
+ className = "Text shrink grow basis-0 text-base font-normal leading-normal text-gray-500 focus:border-indigo-500"
100
+ type = "email"
101
+ name = "email"
102
+ required
103
+ />
104
+ </ div >
73
105
</ div >
74
106
</ div >
75
- </ div >
76
- < div className = "InputWithLabel self-stretch h-11 flex-col justify-start items-start gap-1.5 flex" >
77
- < div className = { `Input self-stretch px-3.5 py-2.5 bg-white rounded-lg shadow border ${ ! emailErr ? 'border-gray-300' : 'border-red-500' } justify-start items-center gap-2 inline-flex` } >
78
- < div className = "Content grow shrink basis-0 h-6 justify-start items-center gap-2 flex" >
79
- < input
80
- placeholder = "Enter your password"
81
- className = "Text grow shrink basis-0 text-gray-500 text-base font-normal leading-normal"
82
- type = "password"
83
- name = "password"
84
- required
85
- />
107
+ < div className = "InputWithLabel flex h-11 flex-col items-start justify-start gap-1.5 self-stretch" >
108
+ < div
109
+ className = { `Input self-stretch rounded-lg border bg-white px-3.5 py-2.5 shadow ${
110
+ ! emailErr ? 'border-gray-300' : 'border-red-500'
111
+ } inline-flex items-center justify-start gap-2`}
112
+ >
113
+ < div className = "Content flex h-6 shrink grow basis-0 items-center justify-start gap-2" >
114
+ < input
115
+ placeholder = "Enter your password"
116
+ className = "Text shrink grow basis-0 text-base font-normal leading-normal text-gray-500"
117
+ type = "password"
118
+ name = "password"
119
+ required
120
+ />
121
+ </ div >
86
122
</ div >
87
123
</ div >
88
- </ div >
89
- < div className = "Button self-stretch rounded-lg justify-start items-start inline-flex" >
90
- < button className = "ButtonBase grow shrink basis-0 h-11 px-4 py-2.5 bg-sky-800 rounded-lg shadow border-gray-400 justify-center items-center gap-2 flex" type = "submit" >
91
- < div >
92
- < div className = "Text text-white text-base font-semibold leading-normal" >
93
- Sign Up
124
+ < div className = "Button inline-flex items-start justify-start self-stretch rounded-lg" >
125
+ < button
126
+ className = "ButtonBase flex h-11 shrink grow basis-0 items-center justify-center gap-2 rounded-lg border-gray-400 bg-sky-800 px-4 py-2.5 shadow"
127
+ type = "submit"
128
+ >
129
+ < div >
130
+ < div className = "Text text-base font-semibold leading-normal text-white" >
131
+ Sign Up
132
+ </ div >
133
+ </ div >
134
+ </ button >
135
+ </ div >
136
+ { emailErr ? (
137
+ < div className = "text-xs text-red-500 md:text-right" >
138
+ Error registering. A user account already exists.
94
139
</ div >
140
+ ) : null }
141
+ </ form >
142
+ < div className = "Row inline-flex items-start justify-center gap-1 self-stretch" >
143
+ < div className = "Text text-sm font-normal leading-tight text-white" >
144
+ Already have an account?
145
+ </ div >
146
+ < div className = "Button flex items-start justify-start" >
147
+ < div className = "ButtonBase flex items-center justify-center gap-2" >
148
+ < div className = "Text text-sm font-semibold leading-tight text-sky-500" >
149
+ < NavLink to = "/login" > Login</ NavLink >
95
150
</ div >
96
- </ button >
97
- </ div >
98
- { emailErr ? (
99
- < div className = "text-xs text-red-500 md:text-right" >
100
- Error signing up, please check email/password and try again.
101
- </ div >
102
- ) : null }
103
- </ form >
104
- < div className = "Row self-stretch justify-center items-start gap-1 inline-flex" >
105
- < div className = "Text text-white text-sm font-normal leading-tight" > Already have an account?</ div >
106
- < div className = "Button justify-start items-start flex" >
107
- < div className = "ButtonBase justify-center items-center gap-2 flex" >
108
- < div className = "Text text-sky-500 text-sm font-semibold leading-tight" >
109
- < NavLink to = "/login" > Login</ NavLink >
110
151
</ div >
152
+ </ div >
111
153
</ div >
112
154
</ div >
113
155
</ div >
114
- </ div >
115
- </ div >
116
156
) ;
117
157
}
0 commit comments