Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -->> index.ts ( my backend )
- import express from "express";
- import dotenv from "dotenv";
- import cors from "cors";
- import connectDB from "./config/db";
- import authRoutes from "./routes/authRoutes";
- import userRoutes from "./routes/UserRoutes";
- import twoFaRoutes from "./routes/TwoFARoutes";
- import enhanceTextRoutes from "./routes/enhanceTextRoutes";
- import checklistRoutes from "./routes/checklistRoutes";
- import faqRoutes from "./routes/faqRoutes";
- import visitorSecurityRoutes from "./routes/visitor-routes/visitorSecurityRoutes";
- import aiChatRoutes from "./routes/AI-routes/aiChatRoutes";
- import incubatorRoutes from "./routes/incubator-routes/incubatorRoutes";
- import resourceRoutes from "./routes/resource-routes/resourceRoutes";
- import path from "path";
- import templateRoutes from "./routes/template-routes/templateRoutes";
- import adminRoutes from "./routes/admin-routes/adminRoutes";
- import cookieParser from "cookie-parser";
- import googleAuthRoutes from "./routes/google-auth/googleAuthRoutes";
- import influencerRoutes from "./routes/influencer-routes/influencerRoutes";
- import StartupInfluencerRoutes from "./routes/influencer-routes/StartupInfluencerRoutes";
- import AngelRoutes from "./routes/angel-routes/AngelRoutes";
- import preSeedRoutes from "./routes/preSeed-routes/preSeedRoutes";
- import seedRoutes from "./routes/Seed-Routes/seedRoutes";
- dotenv.config();
- const FRONTEND_URL = "https://founders-portal-test-server-client.onrender.com";
- const BACKEND_URL = "https://founders-portal-test-server-apii.onrender.com";
- const app = express();
- const PORT = process.env.PORT || 5000;
- app.use(cookieParser());
- // Middleware
- app.use(
- cors({
- origin: "https://founders-portal-test-server-client.onrender.com",
- credentials: true,
- methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"],
- allowedHeaders: ["Content-Type", "Authorization", "Cookie"],
- exposedHeaders: ["set-cookie"],
- })
- );
- app.use(express.json());
- app.get("/", (req, res) => {
- res.send("API is running...");
- });
- // Connect to Database
- connectDB();
- // Routes
- app.use("/api/auth", googleAuthRoutes);
- app.use("/api/admin", adminRoutes);
- app.use("/api", authRoutes);
- app.use("/api/user", userRoutes);
- app.use("/api/twofa", twoFaRoutes);
- app.use("/api/check", checklistRoutes);
- app.use("/api/faq", faqRoutes);
- app.use("/api", visitorSecurityRoutes);
- app.use("/api/ai", enhanceTextRoutes);
- app.use("/api/ai-chat", aiChatRoutes);
- app.use("/api", incubatorRoutes);
- app.use("/api", AngelRoutes);
- app.use("/api", preSeedRoutes);
- app.use("/api", seedRoutes);
- app.use("/api", templateRoutes);
- app.use("/api/resources", resourceRoutes);
- app.use("/api/influencers", influencerRoutes);
- app.use("/api/startup-influencers", StartupInfluencerRoutes);
- app.use("/resuploads", (req, res, next) => {
- // Check if it's a download request
- if (req.query.download === "true") {
- // Set headers for download
- res.setHeader("Content-Disposition", "attachment");
- }
- next();
- });
- app.use("/resuploads", express.static(path.join(__dirname, "Resuploads")));
- if (process.env.NODE_ENV === "development") {
- app.get("/api/debug/routes", (req, res) => {
- const routes = app._router.stack
- .filter((r: any) => r.route)
- .map((r: any) => ({
- path: r.route.path,
- methods: Object.keys(r.route.methods),
- }));
- res.json(routes);
- });
- }
- app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
- export default app;
- -->> frontend ( AdminLogin.tsx ) this is where the backend is connected to
- import React, { useState } from "react";
- import { useNavigate } from "react-router-dom";
- import { Card, message } from "antd";
- import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google";
- const GOOGLE_CLIENT_ID = import.meta.env.VITE_ADMIN_PRODUCTION_GOOGLE_CLIENT_ID;
- const BACKEND_URL =
- import.meta.env.VITE_BACKEND_URL ||
- "https://founders-portal-test-server-apii.onrender.com";
- const AdminLogin: React.FC = () => {
- const navigate = useNavigate();
- const [loading, setLoading] = useState(false);
- const handleGoogleSuccess = async (credentialResponse: any) => {
- setLoading(true);
- try {
- const response = await fetch(`${BACKEND_URL}/api/auth/google-login`, {
- // Update with your actual backend URL
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- credential: credentialResponse.credential,
- }),
- credentials: "include",
- mode: "cors",
- });
- if (!response.ok) {
- throw new Error("Authentication failed");
- }
- const data = await response.json();
- if (data.isAdmin) {
- message.success("Login successful!");
- navigate("/adminPortal/dashboard");
- } else {
- message.error("You do not have admin access");
- }
- } catch (error) {
- console.error("Login error:", error);
- message.error("Login failed. Please try again.");
- } finally {
- setLoading(false);
- }
- };
- return (
- <GoogleOAuthProvider clientId={GOOGLE_CLIENT_ID}>
- <div
- style={{
- minHeight: "100vh",
- display: "flex",
- alignItems: "center",
- justifyContent: "center",
- background: "#f0f2f5",
- }}
- >
- <Card style={{ width: 400 }}>
- <h1 style={{ textAlign: "center", marginBottom: 24 }}>Admin Login</h1>
- <div style={{ display: "flex", justifyContent: "center" }}>
- <GoogleLogin
- onSuccess={handleGoogleSuccess}
- onError={() => {
- console.error("Login Failed");
- message.error("Login Failed");
- }}
- useOneTap
- theme="outline"
- size="large"
- text="continue_with"
- />
- </div>
- </Card>
- </div>
- </GoogleOAuthProvider>
- );
- };
- export default AdminLogin;
- -->> GoogleAuthRoutes.ts ( route file, backend )
- import express, { RequestHandler } from "express";
- import { googleLogin } from "../../controllers/googleauthController";
- import { authenticateAdmin } from "../../middleware/adminAuth";
- const router = express.Router();
- const FRONTEND_URL = "https://founders-portal-test-server-client.onrender.com";
- // Get current user info
- const getCurrentUser: RequestHandler = (req, res) => {
- res.header("Access-Control-Allow-Origin", FRONTEND_URL);
- res.header("Access-Control-Allow-Credentials", "true");
- res.json({
- id: req.adminuser?._id,
- adminemail: req.adminuser?.adminemail,
- adminname: req.adminuser?.adminname,
- adminrole: req.adminuser?.adminrole,
- profilePic: req.adminuser?.profilePic,
- });
- };
- // Logout handler
- const logout: RequestHandler = (req, res) => {
- res.header("Access-Control-Allow-Origin", FRONTEND_URL);
- res.header("Access-Control-Allow-Credentials", "true");
- res.clearCookie("adminToken", {
- httpOnly: true,
- secure: true,
- sameSite: "none",
- });
- res.json({ message: "Logged out successfully" });
- };
- // Wrap googleLogin to ensure proper headers
- const wrappedGoogleLogin: RequestHandler = async (req, res, next) => {
- try {
- const origin = req.headers.origin;
- if (origin === FRONTEND_URL) {
- res.header("Access-Control-Allow-Origin", FRONTEND_URL);
- res.header("Access-Control-Allow-Credentials", "true");
- }
- await googleLogin(req, res, next);
- } catch (error) {
- next(error);
- }
- };
- // Route definitions
- router.post("/google-login", wrappedGoogleLogin);
- router.get("/current-user", authenticateAdmin, getCurrentUser);
- router.post("/logout", logout);
- export default router;
Advertisement
Add Comment
Please, Sign In to add comment