auth complete

This commit is contained in:
Priyatham-sai-chand 2020-12-07 23:19:14 +05:30
parent f5542b610e
commit e34f9035ff
12 changed files with 114 additions and 126 deletions

View File

@ -1,4 +1,5 @@
const jwt = require("jsonwebtoken"); const jwt = require("jsonwebtoken");
const config = require("config");
const auth = (req, res, next) => { const auth = (req, res, next) => {
try { try {
@ -8,7 +9,7 @@ const auth = (req, res, next) => {
.status(401) .status(401)
.json({ msg: "No authentication token, authorization denied." }); .json({ msg: "No authentication token, authorization denied." });
const verified = jwt.verify(token, process.env.JWT_SECRET); const verified = jwt.verify(token, config.get("jwtSecret") );
if (!verified) if (!verified)
return res return res
.status(401) .status(401)

View File

@ -5,13 +5,6 @@ const auth = require("../middleware/auth");
const User = require("../schemas/User"); const User = require("../schemas/User");
const config = require("config"); const config = require("config");
router.get("/", async(req,res) => {
console.log(config.get('jwtSecret'));
return "<h1>asdf<h1/>";
});
router.post("/register", async (req, res) => { router.post("/register", async (req, res) => {
try { try {
@ -68,8 +61,8 @@ router.post("/login", async (req, res) => {
if (!isMatch) return res.status(400).json({ msg: "Invalid credentials." }); if (!isMatch) return res.status(400).json({ msg: "Invalid credentials." });
const token = jwt.sign({ id: user._id },config.get('jwtSecret')); const token = jwt.sign({ id: user._id },config.get('jwtSecret'));
if(token) return res.json if(token) return res
res.json({ .json({
token, token,
user: { user: {
id: user._id, id: user._id,
@ -93,14 +86,14 @@ router.delete("/delete", auth, async (req, res) => {
router.post("/tokenIsValid", async (req, res) => { router.post("/tokenIsValid", async (req, res) => {
try { try {
const token = req.header("x-auth-token"); const token = req.header("x-auth-token");
if (!token) return res.json({error: qwer}); if (!token) return res.json({error: message});
const verified = jwt.verify(token, config.get("jwtSecret")); const verified = jwt.verify(token, config.get("jwtSecret"));
if (!verified) return res.json({error: asdf}); if (!verified) return res.json({error: message});
const user = await User.findById(verified.id); const user = await User.findById(verified.id);
if (!user) return res.json({error: zxcv}); if (!user) return res.json({error: message});
return res.json(true); return res.json(true);
} catch (err) { } catch (err) {
@ -110,6 +103,7 @@ router.post("/tokenIsValid", async (req, res) => {
router.get("/", auth, async (req, res) => { router.get("/", auth, async (req, res) => {
const user = await User.findById(req.user); const user = await User.findById(req.user);
console.log(user);
res.json({ res.json({
username: user.username, username: user.username,
id: user._id, id: user._id,

View File

@ -3,10 +3,11 @@ import Axios from 'axios';
import HomePage from "./components/HomePage"; import HomePage from "./components/HomePage";
import PricingPlan from "./components/PricingPlan"; import PricingPlan from "./components/PricingPlan";
import LogInContainer from "./components/LogInContainer"; import LogInContainer from "./components/LogInContainer";
import { Router,BrowserRouter, Route, Switch } from 'react-router-dom'; import { BrowserRouter, Route, Switch } from 'react-router-dom';
import UserContext from "./context/UserContext"; import UserContext from "./context/UserContext";
import Options from "./components/Options"; import Options from "./components/Options";
import Stepper from './components/Stepper'; import Stepper from './components/Stepper';
import NavBar from "./components/NavBar";
export default function App() { export default function App() {
const [userData, setUserData ] = useState({ const [userData, setUserData ] = useState({
@ -43,21 +44,25 @@ export default function App() {
},[]) },[])
return ( return (
<>
<div className="App"> <div className="App">
<BrowserRouter> <BrowserRouter>
<UserContext.Provider value= {{userData, setUserData}}> <UserContext.Provider value= {{userData, setUserData}}>
<Switch> <Switch>
<Route exact path="/" component={HomePage} /> <Route exact path="/" component={HomePage} />
<Route exact path="asdf" component={NavBar} />
<Route path="/user" component={LogInContainer} /> <Route path="/user" component={LogInContainer} />
<Route path="/pricing" component={PricingPlan} /> <Route path="/pricing" component={PricingPlan} />
<Route path="/track" component={Stepper} /> <Route path="/track" component={Stepper} />
<Route path="/options" component={Options} /> <Route path="/options" component={Options} />
<Route path="/" render={() => <div>404</div>}/>
</Switch> </Switch>
</UserContext.Provider> </UserContext.Provider>
</BrowserRouter> </BrowserRouter>
</div> </div>
</>
); );
} }

View File

@ -1,10 +1,34 @@
import React from "react"; import React from "react";
import styled from 'styled-components';
export default function ErrorNotice(props) { export default function ErrorNotice(props) {
const ErrorNotice = styled.div`
margin: 1rem 0;
padding: 0.5rem;
border: 1px solid #e07c7c;
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #f8d6d6;
`;
const ErrorMessage = styled.div`
color: #000000;
`;
const ErrorButton = styled.button
`
width: 17px;
height: 28px;
display:flex;
background-color: #df4343;
color: #ffffff;
`;
return ( return (
<div className="error-notice"> <ErrorNotice>
<span>{props.message}</span> <ErrorMessage>{props.message}</ErrorMessage>
<button onClick={props.clearError}>X</button> <ErrorButton onClick={props.clearError}>x</ErrorButton>
</div> </ErrorNotice>
); );
} }

View File

@ -1,13 +1,13 @@
import React, { Component } from 'react'; import React from 'react';
import '../homepage.css'; import '../homepage.css';
import LogInContainer from './LogInContainer';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import Navbar from './NavBar';
import NavBar from './NavBar'; import NavBar from './NavBar';
import { useHistory } from "react-router-dom";
class HomePage extends Component { export default function HomePage(){
render(){ const history = useHistory();
return ( return (
<div className="HomePage"> <div className="HomePage">
@ -21,9 +21,11 @@ class HomePage extends Component {
<div className="col-lg-6"> <div className="col-lg-6">
<h1 className="big-heading">Adapt to a new place easy peasy.</h1> <h1 className="big-heading">Adapt to a new place easy peasy.</h1>
<button type="button" className = "btn btn-info login mr-1">Log In</button> <button type="button" onClick={() => {
history.push("/user/login")
}} className = "btn btn-info login mr-1">Log In</button>
<button type="button" className="btn btn-info loginb" >Sign Up</button> <button type="button" className="btn btn-info loginb" onClick={() => history.push("/user/register")} >Sign Up</button>
</div> </div>
@ -162,6 +164,4 @@ class HomePage extends Component {
); );
} }
}
export default HomePage;

View File

@ -1,5 +1,5 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { BrowserRouter, Route, NavLink, Switch } from 'react-router-dom'; import { BrowserRouter, Route, NavLink, Switch,withRouter } from 'react-router-dom';
import Register from './Register'; import Register from './Register';
import Login from './Login'; import Login from './Login';
@ -37,5 +37,5 @@ class LogInContainer extends Component {
} }
} }
export default LogInContainer; export default withRouter(LogInContainer);

View File

@ -1,10 +1,9 @@
import React, { useState, useContext } from "react"; import React, { useState, useContext } from "react";
import { useHistory } from "react-router-dom";
import UserContext from "../context/UserContext"; import UserContext from "../context/UserContext";
import Axios from "axios"; import Axios from "axios";
import { Link } from "react-router-dom";
import ErrorNotice from "./ErrorNotice"; import ErrorNotice from "./ErrorNotice";
import { Link, useHistory, withRouter } from "react-router-dom";
const Login = () => { const Login = () => {
@ -12,7 +11,7 @@ const Login = () => {
const [password, setPassword] = useState(); const [password, setPassword] = useState();
const [error, setError] = useState(); const [error, setError] = useState();
const { setUserData } = useContext(UserContext); const { userData,setUserData } = useContext(UserContext);
const history = useHistory(); const history = useHistory();
@ -24,13 +23,13 @@ const Login = () => {
"http://localhost:5000/users/login", "http://localhost:5000/users/login",
loginUser loginUser
); );
console.log(loginRes);
setUserData({ setUserData({
token: loginRes.data.token, token: loginRes.data.token,
user: loginRes.data.user, user: loginRes.data.user,
}); });
localStorage.setItem("auth-token", loginRes.data.token); localStorage.setItem("auth-token", loginRes.data.token);
history.push("/register"); console.log(userData);
history.push("/");
} catch (err) { } catch (err) {
err.response.data.msg && setError(err.response.data.msg); err.response.data.msg && setError(err.response.data.msg);
} }
@ -38,6 +37,9 @@ const Login = () => {
return ( return (
<div className="FormCenter"> <div className="FormCenter">
{error && (
<ErrorNotice message={error} clearError={() => setError(undefined)} />
)}
<form className="FormFields" onSubmit={submit}> <form className="FormFields" onSubmit={submit}>
<div className="FormField"> <div className="FormField">
<label className="FormField__Label" htmlFor="email">E-Mail Address</label> <label className="FormField__Label" htmlFor="email">E-Mail Address</label>
@ -53,11 +55,9 @@ const Login = () => {
<button className="FormField__Button mr-20" >Sign In</button> <Link exact to="/sign-up" className="FormField__Link">Not a member?</Link> <button className="FormField__Button mr-20" >Sign In</button> <Link exact to="/sign-up" className="FormField__Link">Not a member?</Link>
</div> </div>
</form> </form>
{error && (
<ErrorNotice message={error} clearError={() => setError(undefined)} />
)}
</div> </div>
); );
} }
export default Login; export default withRouter(Login);

View File

@ -1,16 +1,13 @@
import React, { useState, useEffect, useContext } from 'react'; import React, { useContext } from 'react';
import { useHistory } from "react-router-dom"; import { Link } from "react-router-dom";
import '../navbar.css'; import '../navbar.css';
import Axios from "axios";
import UserContext from "../context/UserContext"; import UserContext from "../context/UserContext";
export default function NavBar() { export default function NavBar() {
const { userData, setUserData } = useContext(UserContext); const { userData, setUserData } = useContext(UserContext);
const history = useHistory();
const register = () => history.push("/user/register");
const login = () => history.push("/home");
const logout = () => { const logout = () => {
setUserData({ setUserData({
token: undefined, token: undefined,
@ -33,18 +30,18 @@ export default function NavBar() {
</label> </label>
<a href="/home" className="logo">locaft</a> <a href="/" className="logo">locaft</a>
<ul> <ul>
<li><a href="#">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="#">About</a></li> <li><a href="/#about-us">About</a></li>
<li><a href="#">Services</a></li> <li><a href="/#features">Services</a></li>
<li><a href="#">Contact us</a></li> <li><a href="/#footer">Contact us</a></li>
{userData.user ? ( {userData.user ? (
<li><a href="#" onClick={logout}>Log Out</a></li> <li><Link onClick={logout}>{userData.user.username}</Link></li>
) : ( ) : (
<React.Fragment> <React.Fragment>
<li><a href="#" onClick={register}>Register</a></li> <li><Link to="/user/register">Register</Link></li>
<li><a href="#" onClick={login}>login</a></li> <li><Link to="/user/login">login</Link></li>
</React.Fragment> </React.Fragment>
)} )}
</ul> </ul>

View File

@ -1,4 +1,4 @@
import React, { Component, useState, useContext } from "react"; import React, { useState, useContext } from "react";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import UserContext from "../context/UserContext"; import UserContext from "../context/UserContext";
import Axios from "axios"; import Axios from "axios";
@ -87,7 +87,7 @@ import ErrorNotice from "./ErrorNotice";
<div className="FormField"> <div className="FormField">
<label className="FormField__CheckboxLabel"> <label className="FormField__CheckboxLabel">
<input className="FormField__Checkbox" type="checkbox" name="hasAgreed" /> I agree all statements in <a href="" className="FormField__TermsLink">terms of service</a> <input className="FormField__Checkbox" type="checkbox" name="hasAgreed" /> I agree all statements in <a href="/" className="FormField__TermsLink">terms of service</a>
</label> </label>
</div> </div>

View File

@ -1,22 +1,17 @@
import React, {useState} from 'react'; import React from 'react';
import styles from '../stepper.module.css'; import '../stepper.css';
import classNames from 'classnames';
export default function Stepper() { export default function Stepper() {
const[next,setNext] = useState(false);
const[clear,setClear] = useState(false);
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
var list = document.getElementById('progress'), var list = document.getElementById('progress'),
next = document.getElementById('next'), next = document.getElementById('next'),
clear = document.getElementById('clear'), clear = document.getElementById('clear'),
children = [...document.querySelectorAll('ele')], children = list.children,
completed = 0; completed = 0;
console.log(children);
// simulate activating a node // simulate activating a node
if(next === true){ next.addEventListener('click', function() {
// count the number of completed nodes. // count the number of completed nodes.
completed = (completed === 0) ? 1 : completed + 2; completed = (completed === 0) ? 1 : completed + 2;
@ -25,27 +20,27 @@ export default function Stepper() {
// for each node that is completed, reflect the status // for each node that is completed, reflect the status
// and show a green color! // and show a green color!
for (var i = 0; i < completed; i++) { for (var i = 0; i < completed; i++) {
children[i].children[0].classNameList.remove(styles['grey']); children[i].children[0].classList.remove('grey');
children[i].children[0].classNameList.add(styles['green']); children[i].children[0].classList.add('green');
// if this child is a node and not divider, // if this child is a node and not divider,
// make it shine a little more // make it shine a little more
if (i % 2 === 0) { if (i % 2 === 0) {
children[i].children[0].classNameList.add('activated'); children[i].children[0].classList.add('activated');
} }
} }
} }, false);
// clear the activated state of the markers // clear the activated state of the markers
if(clear === true){ clear.addEventListener('click', function() {
for (var i = 0; i < children.length; i++) { for (var i = 0; i < children.length; i++) {
children[i].children[0].classNameList.remove('green'); children[i].children[0].classList.remove('green');
children[i].children[0].classNameList.remove('activated'); children[i].children[0].classList.remove('activated');
children[i].children[0].classNameList.add('grey'); children[i].children[0].classList.add('grey');
} }
completed = 0; completed = 0;
} }, false);
}); });
return ( return (
@ -55,16 +50,16 @@ export default function Stepper() {
<br /> <br />
<br /> <br />
<ul id="progress"> <ul id="progress">
<li className="ele"><div className={classNames({'node':true,'grey': true })}></div><p>Transport tickets confirmed</p></li> <li className="ele"><div className="node grey"></div><p>Transport tickets confirmed</p></li>
<li className="ele" ><div className={classNames({'divider':true, 'grey':true})}></div></li> <li className="ele" ><div className="divider grey"></div></li>
<li className="ele" ><div className="node grey"></div><p>Packers & movers due to come in a day</p></li> <li className="ele" ><div className="node grey"></div><p>Packers & movers due to come in a day</p></li>
<li className="ele"><div className="divider grey"></div></li> <li className="ele"><div className="divider grey"></div></li>
<li className="ele"><div className="node grey"></div><p>school admission being confirmed</p></li> <li className="ele"><div className="node grey"></div><p>school admission being confirmed</p></li>
<li className = "ele"><div className="divider grey"></div></li> <li className = "ele"><div className="divider grey"></div></li>
<li className = "ele"><div className="node grey"></div><p>House is empty</p></li> <li className = "ele"><div className="node grey"></div><p>House is empty</p></li>
</ul> </ul>
<input type="button" onClick={() => setNext(true)} value="Next" id="next" /> <input type="button" value="Next" id="next" />
<input type="button" onClick={ () => setNext(true)} value="Clear" id="clear" /> <input type="button" value="Clear" id="clear" />
</div> </div>
) )

View File

@ -6,6 +6,11 @@ div {
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
font-family: "Montserrat-Bold"; font-family: "Montserrat-Bold";
color: white;
}
h1 {
color: white !important;
} }
p { p {
@ -51,31 +56,7 @@ p {
} }
/* Navigation Bar */ /* Navigation Bar */
.header{
position:sticky;
top:0;
}
.navbar {
padding: 0 0 4.5rem;
position: sticky;
top: 0;
}
.navbar-brand {
font-family: "Ubuntu";
font-size: 2.5rem;
font-weight: bold;
}
.nav-item {
padding: 0 18px;
}
.nav-link {
font-size: 1.2rem;
font-family: "Montserrat-Light";
}
/* Buttons */ /* Buttons */
@ -192,11 +173,3 @@ p {
} }
} }
/* Login Page */
.login-heading{
margin: 3% 5%;
}
.signup .signin{
margin: 10% 3%;
}

View File

@ -1,6 +1,5 @@
*, *:after, *:before { margin:0; padding:0; } *, *:after, *:before { margin:0; padding:0; }
body { body {
padding: 15px;
font-family: Helvetica, sans-serif; font-family: Helvetica, sans-serif;
} }