next.js 下一个13与问题的服务器组件与cookie

eivgtgni  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(85)

我有一个代码,我想从前端的用户那里获取cookie,并检查它是否与bano相同,因为我在数据库和前端的cookie中有jwt令牌,因为我检查“令牌”cookie是否存在,如果不存在,它会重定向您登录,如果存在,它会检查cookie是否与银行的cookie匹配,如果匹配,它会释放页面,如果没有,它会给出一个无效的token。

"use client"

import { redirect } from 'next/navigation'
import {cookies } from "next/headers"
import { useContext } from 'react'
import { AuthContext } from '../contexts/AuthContext'

export default function ExploreCourses(){
    const {user} = useContext(AuthContext) 

    if(!user.token){
        redirect("/signIn")
    }

    if(user.token){
        const cookie = cookies().get("token")
        if(!cookie == user.token){
            redirect("/signIn")
        }
        return
    }
    
    return(
        <h2>dashboard</h2>
    )
}

字符串

**错误:ReactServerError:

您正在导入一个需要next/header的组件。这只适用于服务器组件,但它的父组件之一标记为“使用客户端”,因此它是客户端组件。了解更多:https://nextjs.org/docs/getting-started/react-essentials**
现在,我想知道为什么它给出这个错误,我已经尝试使用next.js,但要做这个检查我需要getServerSideProps函数,所以检查,但它不可用,因为我使用的是app/目录,因为它给出了这个错误?我怎么能做这个检查?我是新使用next.js

k10s72fa

k10s72fa1#

您在客户端组件中使用的是仅服务器功能(头)。您应该删除文件顶部以及所有父组件上的“使用客户端”。如果需要客户端交互,可以创建子客户端组件。例如

"use client"
import { redirect } from 'next/navigation'
import { useContext } from 'react'
import { AuthContext } from '../contexts/AuthContext'

export default function ExploreCourses(props){
    const {user} = useContext(AuthContext) 

    if(!user.token){
        redirect("/signIn")
    }

    if(user.token){
        const cookies = props.cookies
        if(!cookie == user.token){
            redirect("/signIn")
        }
        return
    }
    
    return(<>
        <h2>dashboard</h2>
        </>
    )
}

字符串
在另一个文件中

export default function ServerComponent(){
 const cookie = cookies().get("token")
  return( <YourClientComponent cookies={cookie} />
)}


在上面的例子中,YourClientComponent被标记为“use client”。你可以通过props来访问服务器上加载的数据。希望这会有帮助。

相关问题