NextJs 使用 Next Auth 保护 API
NextJs protected API with Next Auth
我在使用 NextAuth 构建 NextJs Web 时遇到问题。我在 pages/api 中创建了自己的 API 并使用 NextAuth 的 getSession 保护它。当我使用 getServerSideProps 或 getStaticProps 调用 API 时,getSession returns 为空值,但是当我在组件函数内部调用 API 时,getSession returns 为用户数据值。任何人都可以提供帮助或提示吗?
pages/index.jsx
export async function getStaticProps(context) {
const projects = await fetchApi(`${process.env.BASE_URL}/projects`);
console.log(projects)
return {
props: {},
};
}
pages/api/项目
import { getSession } from 'next-auth/client';
async function handler(req, res) {
const projectService = new ProjectService();
let session;
let emailUser;
try {
session = await getSession({ req });
console.log(session); // null
emailUser = session.user.email;
if (!session) {
throw new AuthenticationError('No authenticated');
}
} catch (error) {
if (error instanceof ClientError) {
return res.status(error.statusCode).json(clientErrRes(error));
}
return res.status(500).json(serverErrRes(error));
}
...another code
}
您需要在从上下文中提取中添加 headers。因为你是从服务器端获取的。
const {req}=context
const {cookie} = req.headers
return fetch(`${process.env.BASE_URL}/projects`, {
headers: {
'Cookie':cookie
}
})
您不能在 getStaticProps
中进行(每个用户)授权,因为这些页面是在编译时生成的。
当您从反应组件(在运行时 - 从浏览器)调用 api
时,您是代表用户进行的,因此那里有一个会话(cookie)。
我在使用 NextAuth 构建 NextJs Web 时遇到问题。我在 pages/api 中创建了自己的 API 并使用 NextAuth 的 getSession 保护它。当我使用 getServerSideProps 或 getStaticProps 调用 API 时,getSession returns 为空值,但是当我在组件函数内部调用 API 时,getSession returns 为用户数据值。任何人都可以提供帮助或提示吗?
pages/index.jsx
export async function getStaticProps(context) {
const projects = await fetchApi(`${process.env.BASE_URL}/projects`);
console.log(projects)
return {
props: {},
};
}
pages/api/项目
import { getSession } from 'next-auth/client';
async function handler(req, res) {
const projectService = new ProjectService();
let session;
let emailUser;
try {
session = await getSession({ req });
console.log(session); // null
emailUser = session.user.email;
if (!session) {
throw new AuthenticationError('No authenticated');
}
} catch (error) {
if (error instanceof ClientError) {
return res.status(error.statusCode).json(clientErrRes(error));
}
return res.status(500).json(serverErrRes(error));
}
...another code
}
您需要在从上下文中提取中添加 headers。因为你是从服务器端获取的。
const {req}=context
const {cookie} = req.headers
return fetch(`${process.env.BASE_URL}/projects`, {
headers: {
'Cookie':cookie
}
})
您不能在 getStaticProps
中进行(每个用户)授权,因为这些页面是在编译时生成的。
当您从反应组件(在运行时 - 从浏览器)调用 api
时,您是代表用户进行的,因此那里有一个会话(cookie)。