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