Skip to content

Commit c3f6639

Browse files
committed
solve auth problem
1 parent 6294457 commit c3f6639

File tree

12 files changed

+246
-223
lines changed

12 files changed

+246
-223
lines changed

package-lock.json

Lines changed: 3 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/App.css

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,38 @@
1-
#root {
2-
max-width: 1280px;
3-
margin: 0 auto;
4-
padding: 2rem;
1+
.App {
52
text-align: center;
63
}
74

8-
.logo {
9-
height: 6em;
10-
padding: 1.5em;
11-
will-change: filter;
12-
transition: filter 300ms;
5+
.App-logo {
6+
height: 40vmin;
7+
pointer-events: none;
138
}
14-
.logo:hover {
15-
filter: drop-shadow(0 0 2em #646cffaa);
9+
10+
@media (prefers-reduced-motion: no-preference) {
11+
.App-logo {
12+
animation: App-logo-spin infinite 20s linear;
13+
}
14+
}
15+
16+
.App-header {
17+
background-color: #282c34;
18+
min-height: 100vh;
19+
display: flex;
20+
flex-direction: column;
21+
align-items: center;
22+
justify-content: center;
23+
font-size: calc(10px + 2vmin);
24+
color: white;
1625
}
17-
.logo.react:hover {
18-
filter: drop-shadow(0 0 2em #61dafbaa);
26+
27+
.App-link {
28+
color: #61dafb;
1929
}
2030

21-
@keyframes logo-spin {
31+
@keyframes App-logo-spin {
2232
from {
2333
transform: rotate(0deg);
2434
}
2535
to {
2636
transform: rotate(360deg);
2737
}
28-
}
29-
30-
@media (prefers-reduced-motion: no-preference) {
31-
a:nth-of-type(2) .logo {
32-
animation: logo-spin infinite 20s linear;
33-
}
34-
}
35-
36-
.card {
37-
padding: 2em;
38-
}
39-
40-
.read-the-docs {
41-
color: #888;
42-
}
38+
}

src/App.jsx

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,58 @@
1-
// import { useState } from 'react';
2-
// import { useEffect } from 'react';
3-
import { BrowserRouter as Router, Routes, Route} from 'react-router-dom';
4-
import { ToastContainer } from 'react-toastify';
5-
import 'react-toastify/dist/ReactToastify.css';
6-
import Login from './assets/Pages/login';
7-
// import Register from './assets/Pages/register';
8-
import Dashboard from './assets/Pages/Dashboard'
9-
import Register from './assets/Pages/register';
10-
// import auth from './assets/Pages/firebase'
1+
import React, { useEffect, useState } from "react";
2+
import "../node_modules/bootstrap/dist/css/bootstrap.min.css";
3+
import "./App.css";
4+
import {
5+
BrowserRouter as Router,
6+
Routes,
7+
Route,
8+
Navigate,
9+
} from "react-router-dom";
10+
11+
import Login from "./components/login";
12+
import SignUp from "./components/register";
13+
import Home from "./components/home";
14+
import Profile from "./components/profile";
15+
import { ToastContainer } from "react-toastify";
16+
import "react-toastify/dist/ReactToastify.css";
17+
import { auth } from "./components/firebase";
18+
import Navbar from "./components/Navbar";
1119

1220
function App() {
13-
// const [user, setUser] = useState();
14-
// useEffect(() => {
15-
// auth.onAuthStateChanged((user) => {
16-
// setUser(user);
17-
// });
18-
// });
21+
const [user, setUser] = useState(null);
22+
23+
useEffect(() => {
24+
const unsubscribe = auth.onAuthStateChanged((user) => {
25+
setUser(user); // Set user when logged in
26+
});
27+
28+
return () => unsubscribe(); // Clean up on unmount
29+
}, []);
30+
1931
return (
2032
<Router>
21-
<div className='App'>
22-
<div className="auth-wrapper">
23-
<div className="auth-inner">
24-
<Routes>
25-
{/* <Route path="/" element={user ? <Navigate to="/profile" /> : <Login />} /> */}
26-
<Route path='/' element={<Login/>}/>
27-
<Route path="/login" element={<Login />} />
28-
<Route path="/register" element={<Register />} />
29-
<Route path='/dashboard' element={<Dashboard />}/>
30-
{/* <Route path="/profile" element={user ? <Profile /> : <Navigate to="/login" />} /> */}
31-
</Routes>
32-
<ToastContainer />
33+
<div className="App">
34+
{/* Pass user status as loggedin prop to Navbar */}
35+
<Navbar loggedin={user ? 'true' : 'false'} />
36+
<div className="auth-wrapper">
37+
<div className="auth-inner">
38+
<Routes>
39+
{/* Redirect to profile if the user is logged in */}
40+
<Route path="/" element={user ? <Navigate to="/profile" /> : <Login />} />
41+
<Route path="/home" element={<Home />} />
42+
<Route
43+
path="/login"
44+
element={user ? <Navigate to="/profile" /> : <Login />}
45+
/>
46+
<Route path="/register" element={<SignUp />} />
47+
<Route
48+
path="/profile"
49+
element={user ? <Profile /> : <Navigate to="/login" />}
50+
/>
51+
</Routes>
52+
<ToastContainer />
53+
</div>
3354
</div>
3455
</div>
35-
</div>
3656
</Router>
3757
);
3858
}

src/assets/Components/Navbar.jsx

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/assets/Pages/register.jsx

Lines changed: 0 additions & 101 deletions
This file was deleted.
File renamed without changes.

src/components/Navbar.jsx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import logo from '../assets/images/logo.png';
2+
import { Link } from 'react-router-dom'; // Import Link from react-router-dom
3+
4+
function Navbar({ loggedin }) {
5+
return (
6+
<nav className="navbar navbar-expand-lg">
7+
<div className="container-fluid">
8+
<button className="navbar-toggler" type="button" data-bs-toggle="collapse"
9+
data-bs-target="#navbarExample" aria-controls="navbarExample" aria-expanded="false" aria-label="Toggle navigation">
10+
<span className="navbar-toggler-icon"></span>
11+
</button>
12+
<Link className="navbar-brand" to="/"><img src={logo} width="36" alt="Logo" /></Link>
13+
<div className="collapse navbar-collapse" id="navbarExample">
14+
<ul className="navbar-nav me-auto mb-0">
15+
<li className="nav-item">
16+
<Link className="nav-link active" aria-current="page" to="/home">Home</Link>
17+
</li>
18+
<li className="nav-item">
19+
<Link className="nav-link" aria-current="page" to="/events">Events</Link>
20+
</li>
21+
<li className="nav-item dropdown">
22+
<Link className="nav-link dropdown-toggle" to="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Courses</Link>
23+
<ul className="dropdown-menu">
24+
<li><Link className="dropdown-item" to="/programming-languages">Programming Languages</Link></li>
25+
<li><Link className="dropdown-item" to="/frameworks">Frameworks</Link></li>
26+
<li><hr className="dropdown-divider" /></li>
27+
<li><Link className="dropdown-item" to="/roadmaps">Roadmaps</Link></li>
28+
</ul>
29+
</li>
30+
</ul>
31+
<div className="d-flex align-items-center flex-column flex-lg-row">
32+
<form className="me-2 mb-2 mb-lg-0">
33+
<input type="text" className="form-control form-control-sm" placeholder="Search" />
34+
</form>
35+
{loggedin === 'true' ? (
36+
<Link className="btn btn-primary" to="/profile">Profile</Link>
37+
) : (
38+
<Link className="btn btn-primary" to="/login">Sign up</Link>
39+
)}
40+
</div>
41+
</div>
42+
</div>
43+
</nav>
44+
);
45+
}
46+
47+
export default Navbar;

src/assets/Pages/firebase.jsx renamed to src/components/firebase.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Import the functions you need from the SDKs you need
22
import { initializeApp } from "firebase/app";
33
import { getAuth } from "firebase/auth";
4+
import { getFirestore } from "firebase/firestore";
45
// TODO: Add SDKs for Firebase products that you want to use
56
// https://firebase.google.com/docs/web/setup#available-libraries
67

@@ -18,5 +19,7 @@ const firebaseConfig = {
1819

1920
// Initialize Firebase
2021
const app = initializeApp(firebaseConfig);
22+
2123
export const auth=getAuth();
24+
export const db=getFirestore(app)
2225
export default app;

0 commit comments

Comments
 (0)