Express 当服务器位于其他端口上时,请求中的Passport用户对象在getInitialProps中不可用
我的Express 当服务器位于其他端口上时,请求中的Passport用户对象在getInitialProps中不可用,express,graphql,next.js,passport.js,apollo-client,Express,Graphql,Next.js,Passport.js,Apollo Client,我的express服务器位于与客户端nextjs项目不同的端口 我知道当您在同一端口上有一台服务器时,您可以使用getRequestHandler和next来传递user对象,以便在客户端使用getInitialProps进行访问 const express = require("express"); const next = require("next"); const app = next({ dev: true }); const handle =
express
服务器位于与客户端nextjs
项目不同的端口
我知道当您在同一端口上有一台服务器时,您可以使用getRequestHandler
和next
来传递user
对象,以便在客户端使用getInitialProps
进行访问
const express = require("express");
const next = require("next");
const app = next({ dev: true });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
// adds passport session
require("./middlewares").init(server);
const apolloServer = require("./graphql").createApolloServer();
apolloServer.applyMiddleware({ app: server });
server.all("*", (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
});
});
我的护照执行如下
const config = require("../config");
const session = require("express-session");
const passport = require("passport");
exports.init = (server, db) => {
require("./passport").init(passport);
const sess = {
name: "pid",
secret: config.SESSION_SECRET,
cookie: { maxAge: 2 * 60 * 60 * 1000 },
resave: false,
saveUninitialized: false,
store: db.initSessionStore(),
};
if (process.env.NODE_ENV === "production") {
server.set("trust proxy", 1);
sess.cookie.secure = true;
sess.cookie.httpOnly = true;
sess.cookie.sameSite = 'none';
sess.cookie.domain = process.env.DOMAIN;
}
server.use(session(sess));
server.use(passport.initialize());
server.use(passport.session());
};
在express
服务器上运行以下命令,我可以看到req.user
返回user
对象
app.use((req, res, next) => {
console.log(req.user);
next();
});
在我的nextjs
应用程序的一个页面中,在getInitialProps
req.user
中是未定义的
Home.getInitialProps = async (ctx) => {
const { req } = ctx;
const { user } = req;
console.log(user);
..........
};
是否有方法通过nextjs中的SSR访问passport用户
对象,或者使用不同的方法在页面上授权和访问用户
在README.md