Next js中服务器端的令牌生成

z31licg0  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(135)

我目前正在使用next.js的服务器端渲染来获取服务器端的API,但我有一个问题,这些API需要一个每1小时过期的令牌,问题是我无法将令牌或到期日期保存在本地存储或cookie上,因为服务器端根本无法访问这些东西,处理这种情况的最佳方法是什么?(请注意,我使用了一个API来生成令牌)。

dxxyhpgq

dxxyhpgq1#

您可以在NextJS的服务器端设置cookie

(应用路由器)路由API

/app/api/get-token/route.js
import { type NextRequest, NextResponse } from 'next/server'
 
export async function GET(request: NextRequest) {
  let response = NextResponse.next()

  response.cookies.set('token', 'Bearer abc123')

  return response
}

(应用路由器)服务器操作

'use server'
 
import { cookies } from 'next/headers'
 
export function setToken() {
  cookies().set('token', "abc123")
}

(页面路由器)路由API

你需要先安装'cookies-next'软件包。

使用npm

npm i cookies-next

使用Yarn

yarn add cookies-next

/pages/api/set-cookie.js
import { setCookie } from 'cookies-next'

export default async function setApiCookie(req, res) {
  try {
    setCookie('token', 'Bearer abc123', { req, res, maxAge: 60 * 60 * 24 })
    res.status(200).send('set api cookies')
  } catch (error) {
    res.status(400).send(error.message)
  }
}

(Pages Router)getServerSideProps

与以前的解决方案一样,您需要安装cookies-next包。

import { setCookie } from 'cookies-next'

export const getServerSideProps = ({ req, res }) => {
  setCookie('token', 'Bearer abc123', { req, res, maxAge: 60 * 60 * 24 })

  return { props: {} }
}

希望能帮上忙。如果你有任何问题或仍然有问题,请尽管问。

相关问题