无法访问 nextjs 中 getServerSideProps 中的会话或 req.user



我需要根据userId获取数据,但使用 SSR 并利用 SSR 功能,如何在 NextJS 提供的 SSR 功能getServerSideProps中访问登录成功后获得的userId。我现在有以下实现。

用户登录后被重定向到pages/index.js, 这是pages/index.js

import { useUser } from '../libs/hooks';
import { client } from '../middlewares/database';
import Home from './Home';
import Landing from './Landing';
const App = ({ data }) => {

const [user] = useUser();
/* I have the user details here and I have a hook for getting user details,
but this is the client-side */
return user?<Home data={data} />:<Landing />
}
export async function getServerSideProps(context) {
const userId = context.req.headers.userId;
// userId is undefined here, I need the userId here
if (!client.isConnected()) await client.connect();
const db = client.db(process.env.DB_NAME);
const response = await db.collection("data").find({ userId });

return { props: { data: response } }
}
export default App;

我正在使用passport.jsnext-session来验证用户并创建一个在所有功能中都可用的会话sid。 如果我可以将userId存储在会话中,那也会有所帮助。

这是我的服务器中间件。

import nextConnect from "next-connect";
import passport from "../libs/passport";
import database from "./database";
import session from "./session";
const middleware = nextConnect();
middleware
.use(database)
.use(session)
.use(passport.initialize())
.use(passport.session());
export default middleware;

这就是登录身份验证文件的外观;auth.js

import nextConnect from 'next-connect';
import { session } from 'next-session';
import { extractUser } from '../../libs/api-helpers';
import passport from '../../libs/passport';
import middleware from '../../middlewares/middleware';
const handler = nextConnect();
handler.use(middleware);
handler.post(passport.authenticate('local'), async (req, res) => {
res.json({ user: extractUser(req) });
});

我可以使用cookie方法或会话方法。在这种情况下,我如何实现这一点?

someMiddlewares.apply已被弃用。请使用someMiddlewares.run

await someMiddleswares.run(req, res)

见 https://github.com/hoangvvo/next-connect/tree/21c9c73fe3746e66033fd51e2aa01d479e267ad6#runreq-res

定义并导出中间件:

import nextConnect from 'next-connect'
const middleware = nextConnect()
middleware.use(session)
middleware.use(passport.initialize())
middleware.use(passport.session())
export default middleware

使用 nextConnectapply方法应用所有中间件:

export async function getServerSideProps({ req, res }) {
await middlewares.apply(req, res)
console.log(req.user._id) // the user is available now!

最新更新