get profile details from token
Sun Jul 23 2023 17:00:42 GMT+0000 (Coordinated Universal Time)
Saved by @nelson22
src > helpers > getDataFromToken.ts import jwt from "jsonwebtoken"; import { NextRequest } from "next/server"; export const getDataFromToken = (request: NextRequest) => { try { const token = request.cookies.get('token')?.value || ''; const decodedToken: any = jwt.verify(token, process.env.TOKEN_SECRET!); return decodedToken.id; } catch (error: any) { throw new Error(error.message); } } ------------------------------------------------------------------------------- src > app > api > users > me > route.ts import { getDataFromToken } from "@/helpers/getDataFromToken"; import Users from "@/models/userModel"; import {connect} from '@/dbConfig/dbConfig'; import { NextRequest, NextResponse } from "next/server"; connect(); export async function GET(request: NextRequest){ try { const userId = await getDataFromToken(request); const user = await Users.findOne({_id: userId}).select("-password -isAdmin"); return NextResponse.json({ message: 'User found', data: user }) } catch (error: any) { return NextResponse.json({error: error.message}, {status: 404}) } } ------------------------------------------------------------------------------- src > app > profile > page.tsx "use client" import axios from "axios"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; export default function profilePage(){ const router = useRouter(); const [userData, setUserData] = useState({}); const logout = async () =>{ try { await axios.get('/api/users/logout'); router.push('/login'); } catch (error) { console.log(error); } } const getUserDetails = async () => { const response = await axios.get('/api/users/me'); console.log("r=",response.data.data); setUserData(response.data.data); } useEffect(() => { getUserDetails(); }, []) return( <div> <h1 className="page-hd">Profile page</h1> <h2>Username: {userData.username}</h2> <h2>Email: {userData.email}</h2> <button onClick={logout}>Logout</button> </div> ) }
Comments