【发布时间】:2021-08-30 09:30:40
【问题描述】:
所以基本上,我有两个具有不同子域的网站。第一个不需要 JWT Token 验证,但第二个需要验证。
只有当原点是https://app.website.com时,如何使用app.use(authorization)?
import cors from 'cors';
if (process.env.NODE_ENV === 'development') {
app.use(cors());
} else {
const whitelist = ['https://www.website.com', 'https://app.website.com'];
app.use(
cors({
origin: function (origin, callback) {
if (origin && whitelist.indexOf(origin) !== -1) {
return callback(null, true);
}
return callback(new Error('Forbidden'), false);
},
optionsSuccessStatus: 204
})
);
app.use(authorization);
}
JWT 验证作为中间件,我尝试检查 req.get('origin') 但它未定义..
import admin from '../helpers/firebase.helper';
const authorization = async (
req,
res,
next
): Promise<void> => {
if (req.headers?.authorization?.startsWith('Bearer ')) {
const idToken = req.headers.authorization.split('Bearer ')[1];
try {
const decodeToken = await admin.auth().verifyIdToken(idToken);
req.current = decodeToken;
next();
} catch (err) {
res.status(StatusCodes.UNAUTHORIZED).send('UnAuthorized');
}
} else {
res.status(StatusCodes.UNAUTHORIZED).send('UnAuthorized');
}
};
第一个站点 www.welcome.com 使用 Nextjs(服务器端渲染)构建,第二个站点使用 React create app(客户端渲染)构建。因此,当我检查 req.get('origin') 的 react create app 请求时,它工作正常,但对于来自 nextjs 应用程序的请求,它是未定义的。
【问题讨论】:
-
你试过
cors({ origin: true, credentials: true })吗?但为此,您需要一个启用 SSL 的服务器。并确保您的 JWT cookie 上有sameSite: "none"属性 -
我试过了,但没有任何改变
标签: node.js express jwt cors middleware