No pude encontrar preguntas similares, así que tuve que hacer esta. Creo que es una tarea bastante simple, pero no puedo encontrar la manera de hacerlo. Estoy trabajando con Strapi y Next.js para crear un sistema de autenticación.
¿Cómo puede el cliente recuperar los datos del usuario del servidor?
// login.js const handleLogin = (e) => { e.preventDefault() axios.post("/api/login", { identifier: `${credentials.email}`, password: `${credentials.password}`, remember: stayLoggedIn, }) .then(()=> { // response.data.user Router.push("/") }).catch(error => { console.log("Error reaching /api/login ->", error) }) } El cliente necesita recuperar response.data.user del servidor.
// /api/login.js export default (req, res) => { const {identifier, password} = req.body; // Strapi login axios.post(`${API_URL}/api/auth/local`, { identifier, password }) .then(response => { // Get user data from Strapi const jwt = response.data.jwt; console.log("Got token, trying login. Token: ", jwt) console.log(response.data.user) // set httponly cookie res.setHeader( "Set-Cookie", cookie.serialize("jwt", jwt, { httpOnly: true, secure: process.env.NODE_ENV !== "development", maxAge: 60 * 60, sameSite: "strict", path: "/", }) ) console.log("Login successful") res.status(200).end() }) .catch(error => { console.log("Error logging in", error) res.status(400).end() }) }Hay una ruta en Strapi /api/users/me que debe pasar jwt en los encabezados y luego devolverá los datos del usuario. Nota: Utilice siempre esta ruta como ruta de autenticación.
try { const request = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/api/users/me`, { method: "GET", headers: { Authorization: `Bearer ${jwt}`,// when user login there will be a jwt in reponse so you can pass user jwt in here }, } ); const response = await request.json(); console.log(response);//{id : 1 ,email : 'abc@email.com' , username : "abc"} res.status(200).json(response); } catch (err) { res.status(403).json({ msg: "Your are not loggedin" }); } active la ruta desde los permisos de usuario -> verifique el yo 