网站部署后无法获取当前用户Token,本地环境运行正常
网站部署后无法获取当前用户Token,本地环境运行正常
后端代码(Node.js / Express)
- indexController.js:包含处理当前用户获取逻辑的
currentUser和signin函数 - router.js:定义了
/signin和/user路由 - sendtoken.js:包含负责向客户端发送Token的
sendToken函数
前端代码(Redux)
用于获取当前用户数据和用户登录的Redux动作。
问题描述
网站部署后,尝试登录或获取当前用户数据时,currentUser函数无法获取Token,但本地环境下一切功能正常。
indexController.js 代码
exports.currentUser = catchAsyncErrors(async (req, res, next) => { const user = await User.findById(req.id).exec() res.json({ user }) }) exports.signin = catchAsyncErrors(async (req, res, next) => { const user = await User.findOne({ email: req.body.email }).select("+password").exec() if (!user) return next(new ErrorHandler("User not found with this email address", 404)) const isPasswordMatched = await user.comparePassword(req.body.password) if (!isPasswordMatched) return next(new ErrorHandler("Wrong Credentials", 401)) sendToken(user, 200, res) })
router.js 代码
router.post('/signin', signin) router.post('/user', isAuthenticated, currentUser)
sendtoken.js 代码
exports.sendToken = (user, statusCode, res) => { const token = user.getjwttoken() const options = { exipres: new Date( Date.now() + process.env.COOKIE_EXPIRE * 24 * 60 * 60 * 1000 ), httpOnly: true, secure:true } console.log(token) res.status(statusCode).cookie("token", token, options) .json({ success: true, id: user._id,token }) }
Redux 代码
export const asyncCurrentUser = (token) => async (dispatch, getState) => { try { const response = await axios.post("/user"); if (response && response.data && response.data.user) { console.log(response) dispatch(saveUser(response.data.user)); } else { console.error('Invalid response format from server:', response.data); } return response.data; } catch (error) { console.error('Error fetching current user data:', error.response?.data ||error.message); throw error; } }; export const asyncsigninUser = (user) => async (dispatch, getState) => { try { const response = await axios.post("/signin", user); console.log(response.data.token) if (response.status == 200) { window.localStorage.setItem("token", response.data.token) await dispatch(asyncCurrentUser(response.data.token)) } return response.data; } catch (error) { console.log(error.response.data); throw error; } };
内容的提问来源于stack exchange,提问作者Pranjal shukla
相关产品推荐
相关产品推荐

