尝试将令牌合并到注册中
Trying To Incorporate Tokens Into Sign Up
我正在尝试在用户注册我的应用程序时从 JWT 创建令牌,但出现错误,错误 [ERR_HTTP_HEADERS_SENT]:无法在之后设置 headers它们被发送到客户端。我认为我的代码结构存在问题。我该如何解决这个问题?
//sign up request
exports.signup = async (req, res, next)=> {
const {email} = req.body;
const userExist = await User.findOne({email});
if (userExist) {
return next(new ErrorResponse(`Email already exists`, 404))
}
try {
const user = await User.create(req.body);
res.status(201).json({
success: true,
user
})
generateToken(user, 201, res);
} catch (error) {
console.log(error);
next(error);
}
}
//generate token method
const generateToken = async (user, statusCode, res) => {
const token = await user.jwtGenerateToken();
var hour = 3600000;
const options = {
httpOnly: true,
expires: new Date(Date.now() + hour)
};
res.status(statusCode)
.cookie('token', token, options)
.json({success: true, token})
}
您正在尝试发送两次响应。然后在 generateToken 方法中。把它放在一个地方,错误就会消失。
首先生成令牌,然后发送响应
generateToken(user, 201, res);
res.status(201).json({
success: true,
user
})
您可以 return 来自令牌的值,然后使用响应发送它,或者您可以只从 generateToken
函数发送它。在这里你试图再次使用响应,尽管你已经发送了一次因此导致错误。
已更新
//注册请求
exports.signup = async (req, res, next)=> {
const {email} = req.body;
const userExist = await User.findOne({email});
if (userExist) {
return next(new ErrorResponse(`Email already exists`, 404))
}
try {
const user = await User.create(req.body);
generateToken(user, 201, res);
} catch (error) {
console.log(error);
next(error);
}
}
//generate token method
const generateToken = async (user, statusCode, res) => {
const token = await user.jwtGenerateToken();
var hour = 3600000;
const options = {
httpOnly: true,
expires: new Date(Date.now() + hour)
};
res.status(statusCode)
.cookie('token', token, options)
.json({success: true, token: token, user: user})
}
我正在尝试在用户注册我的应用程序时从 JWT 创建令牌,但出现错误,错误 [ERR_HTTP_HEADERS_SENT]:无法在之后设置 headers它们被发送到客户端。我认为我的代码结构存在问题。我该如何解决这个问题?
//sign up request
exports.signup = async (req, res, next)=> {
const {email} = req.body;
const userExist = await User.findOne({email});
if (userExist) {
return next(new ErrorResponse(`Email already exists`, 404))
}
try {
const user = await User.create(req.body);
res.status(201).json({
success: true,
user
})
generateToken(user, 201, res);
} catch (error) {
console.log(error);
next(error);
}
}
//generate token method
const generateToken = async (user, statusCode, res) => {
const token = await user.jwtGenerateToken();
var hour = 3600000;
const options = {
httpOnly: true,
expires: new Date(Date.now() + hour)
};
res.status(statusCode)
.cookie('token', token, options)
.json({success: true, token})
}
您正在尝试发送两次响应。然后在 generateToken 方法中。把它放在一个地方,错误就会消失。
首先生成令牌,然后发送响应
generateToken(user, 201, res);
res.status(201).json({
success: true,
user
})
您可以 return 来自令牌的值,然后使用响应发送它,或者您可以只从 generateToken
函数发送它。在这里你试图再次使用响应,尽管你已经发送了一次因此导致错误。
已更新
//注册请求
exports.signup = async (req, res, next)=> {
const {email} = req.body;
const userExist = await User.findOne({email});
if (userExist) {
return next(new ErrorResponse(`Email already exists`, 404))
}
try {
const user = await User.create(req.body);
generateToken(user, 201, res);
} catch (error) {
console.log(error);
next(error);
}
}
//generate token method
const generateToken = async (user, statusCode, res) => {
const token = await user.jwtGenerateToken();
var hour = 3600000;
const options = {
httpOnly: true,
expires: new Date(Date.now() + hour)
};
res.status(statusCode)
.cookie('token', token, options)
.json({success: true, token: token, user: user})
}