diff --git a/digital-course-file/src/Routes.js b/digital-course-file/src/Routes.js index 2f12305ace31c4f7130507bf3964c0080d75a64c..c13c1c718803edb4dbbb7dd7bb376344b8352092 100644 --- a/digital-course-file/src/Routes.js +++ b/digital-course-file/src/Routes.js @@ -10,6 +10,7 @@ import copyright from './user/copyright' import { Link } from 'react-router-dom' import { Container, Button, Navbar, Nav } from 'react-bootstrap' import fire from './fire' +import ForgotPassword from "./user/ForgotPassword" const Routes = () => { @@ -51,6 +52,7 @@ const Routes = () => { <Route path='/' exact component={Signin} /> <Route path='/signin' exact component={Signin} /> <Route path='/copyright' exact component={copyright} /> + <Route path='/forgot-password' component={ForgotPassword} /> </Switch> <Navbar fixed='bottom' variant='light' bg='light'> <Container className='ml-sm-2'> diff --git a/digital-course-file/src/user/ForgotPassword.js b/digital-course-file/src/user/ForgotPassword.js new file mode 100644 index 0000000000000000000000000000000000000000..58ea8ae833eb323c0062f158b64695e9c34e8309 --- /dev/null +++ b/digital-course-file/src/user/ForgotPassword.js @@ -0,0 +1,48 @@ +import React, { useState, useEffect } from 'react' +import { Link } from 'react-router-dom' +import fire from '../fire' +import firebase from 'firebase' + +export default function ForgotPassword() { + const [email, setEmail] = useState('') + const [emailError, setEmailError] = useState('') + const clearErrors = () => { + setEmailError('') + setEmail('') + } + + const handleforgot = () => { + clearErrors() + fire + .auth() + .sendPasswordResetEmail(email) + .catch((e) => { + setEmailError(e.message) + }) + setEmailError('Check your inbox for furthur instructions') + } + return ( + <section className='login'> + <div className='loginContainer'> + <p className='errorMsg'>{emailError}</p> + <label>UserName</label> + <input + type='text' + autoFocus + required + value={email} + onChange={(e) => setEmail(e.target.value)} + ></input> + <div className='btnContainer'> + <button onClick={handleforgot}>Reset Password</button> + <p> + Have an account ?{' '} + <Link to='/signin'> + <span>Sign in</span> + </Link> + </p> + </div> + </div> + </section> + ) +} diff --git a/digital-course-file/src/user/Login.js b/digital-course-file/src/user/Login.js index 579d82dc63d2593313109b376345e0ad6fbb0037..45127309fcdb2660110dcb4a368b13d7012c037d 100644 --- a/digital-course-file/src/user/Login.js +++ b/digital-course-file/src/user/Login.js @@ -1,6 +1,9 @@ -import React from 'react' +import React, { useState, useEffect } from 'react' import GoogleButton from 'react-google-button' import GithubButton from 'react-github-login-button' +import { Link } from 'react-router-dom' +import Loader from 'react-loader-spinner' + const Login = (props) => { const { @@ -16,7 +19,27 @@ const Login = (props) => { passwordError, googlesignin, githubsignin, + loading, } = props + + useEffect(() => { + if (loading) { + return ( + <> + <div className='centered'> + <Loader + type='Puff' + color='#00BFFF' + height={100} + width={100} + timeout={3000} //3 secs + /> + </div> + </> + ) + } + }, [loading]) + return ( <section className='login'> <div className='loginContainer'> @@ -41,6 +64,9 @@ const Login = (props) => { {hasAccount ? ( <> <button onClick={handleLogin}>Sign In</button> + <div className='w-100 text-center mt-3'> + <Link to='/forgot-password'>Forgot Password</Link> + </div> <p> Don't have an account ?{' '} <span onClick={() => setHasAccount(!hasAccount)}>Sign up</span> @@ -48,25 +74,23 @@ const Login = (props) => { <p></p> <GoogleButton onClick={googlesignin} /> <p></p> - - <GithubButton - onClick={githubsignin} - /> + + <GithubButton onClick={githubsignin} /> </> ) : ( <> <button onClick={handleSignup}>Sign up</button> + <p> Have an account ?{' '} <span onClick={() => setHasAccount(!hasAccount)}>Sign in</span> </p> <p></p> + <GoogleButton onClick={googlesignin} /> <p></p> - - <GithubButton - onClick={githubsignin} - /> + + <GithubButton onClick={githubsignin} /> </> )} </div> diff --git a/digital-course-file/src/user/Signin.js b/digital-course-file/src/user/Signin.js index 1cc6cbbd3842368cfcf7c3cf4552a2f33f92bc03..3462fac4957b4474160a36eee3db00ba58961bf4 100644 --- a/digital-course-file/src/user/Signin.js +++ b/digital-course-file/src/user/Signin.js @@ -12,6 +12,7 @@ const Signin = () => { const [emailError, setEmailError] = useState('') const [passwordError, setPasswordError] = useState('') const [hasAccount, setHasAccount] = useState(false) + const [loading, setloading] = useState(false) const githubsignin = () => { var provider = new firebase.auth.GithubAuthProvider() @@ -81,7 +82,10 @@ const Signin = () => { setPasswordError('') } + + const handleLogin = () => { + setloading(true) clearErrors() fire .auth() @@ -98,6 +102,7 @@ const Signin = () => { break } }) + setloading(false) } const handleSignup = () => { @@ -155,6 +160,7 @@ const Signin = () => { passwordError={passwordError} googlesignin={googlesignin} githubsignin={githubsignin} + loading={loading} /> )} </div>