未在响应标头中设置NextJS api cookie

时间:2019-12-25 12:09:10

标签: laravel oauth next.js micro

我正在使用NextJs getInitialProps尝试刷新访问令牌。

if(!access_token && ctx.req) {
  try {
    await axios({
      method: 'GET',
      url: 'http://localhost:3000/api/refresh_token',
      withCredentials: true,
      headers: refresh_token ? { cookie: ctx.req.headers.cookie } : {}
    })

    console.log(ctx.res.headers)
  } catch (error) {
    console.log(error.response)
  }
}

这是api端点:

import axios from 'axios'
import { serialize } from 'cookie'

export default async (req, res) => {
  try {
    const response = await axios.post('http://localhost/oauth/token', {
      grant_type: 'refresh_token',
      refresh_token: req.cookies.refresh_token,
      client_id: process.env.CLIENT_ID,
      client_secret: process.env.CLIENT_SECRET,
      scope: '*',
    })

    const { access_token, refresh_token, expires_in } = response.data

    res.setHeader('Set-Cookie', [
      serialize('access_token', access_token, { path: '/', maxAge: expires_in, httpOnly: true, sameSite: true }), 
      serialize('refresh_token', refresh_token, { path: '/', httpOnly: true, sameSite: true })
    ])

    return res.status(200).json({ message: 'yess' })
  } catch (error) {
    res.status(error.status || 500).end(error.response.data.message)
  }
}

但是当我记录响应头时,没有设置cookie。 Chrome浏览器也不会显示Cookie。我错过了一步吗?也许因为它的服务器端渲染,我不得不另辟?径?老实说,我已经坚持了3天,并且尝试了所有操作(至少是这样),但没有成功。因为我不知道要在NextJs中设置正确的身份验证,所以它困扰了我。

0 个答案:

没有答案