Мне нужно получить данные на основе userId
, но с использованием SSR и функций SSR, как я могу получить доступ к userId
, полученному после успешного входа в систему, в функции SSR getServerSideProps
, предоставляемой Next JS . Прямо сейчас у меня есть следующая реализация.
Пользователь перенаправляется на 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.js
и next-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) });
});
Я могу использовать либо подход повара ie, либо подход сеанса. Как мне добиться этого в этом сценарии?