【发布时间】:2021-03-09 20:59:03
【问题描述】:
首先,我想说我已经阅读了有关此问题的几乎所有内容,但到目前为止还没有解决方案。
简而言之,我有一个在 localhost:3000 上运行的 Node.js API 服务器。我还在 localhost:4200 上运行了一个 Angular 10 应用程序。问题很简单 - 我向 localhost:3000/api/users/login 发出请求并收到以下信息: server-response
但是,您可以在此处看到没有保存 cookie:empty-cookies
因此,每个后续请求(无论是 POST 还是 GET)都没有标头,服务器无法识别用户。 到目前为止,我尝试过:
- 将 { withCredentials: true } 包含到来自 angular 的 http 请求中
- 将 cookie 更改为 http: false
- 将 cookie 中的域设置为“.app.localhost”等各种内容
- 将 sameSite: 'none' 添加到 cookie 中
- 在运行 API 的 localhost:3000 上搜索 cookie
- 将 cors 中的原点更改为“*”或完全删除它
- 在 Edge 中也尝试了所有这些东西(否则我使用 Chrome)
不幸的是,这些东西都不适合我。否则登录和注册成功,我可以在 mongo 中看到数据。
这里我将添加我使用的代码的sn-ps:
const app = express();
app.use(express.json());
app.use(cookieParser(config.cookieSecret));
app.use(express.static(path.resolve(__basedir, 'static')));
app.use(cors({
origin: config.origin,
credentials: true
}));
app.use('/api', apiRouter);
app.use(errorHandler);
这是我设置 cookie 的登录处理程序:
async function login(req, res, next) {
const { email, password } = req.body;
try {
let user = await User.findOne({ email });
const match = await user.matchPassword(password);
if (!match) {
res.status(401)
.send({ message: 'Wrong username or password' });
return
}
user = bsonToJson(user);
const token = utils.jwt.createToken({ id: user._id });
if (process.env.NODE_ENV === 'production') {
res.cookie(authCookieName, token, { httpOnly: true, sameSite: 'none', secure: true })
} else {
res.cookie(authCookieName, token, { httpOnly: true })
}
res.status(200).send(user);
} catch (err) {
next(err);
}
}
这里是 Angular 部分:
loginMet(data) {
return this.http.post('http://localhost:3000/api/users/login', data, {withCredentials: true});
}
【问题讨论】:
标签: node.js angular express cookies jwt