gpt4 book ai didi

node.js - Express + Passport.js : req. 用户未定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:43 24 4
gpt4 key购买 nike

我有一个 Express API 服务器和一个没有代理的 create-react-app 应用程序。我使用 Passport.js 进行 OAuth,它在 MongoDB 中查找以反序列化用户。

在后端,我设置了 cors 中间件,在前端,我使用我的服务器 URL 配置了 axios 基本 URL。

通过 postman /在 URL 栏中手动写入端点,我的 API 请求成功并找到了 req.user。但是,如果我使用 axios 从前端发出 API 请求,则 req.user 未定义或为空字符串。

我不明白,请大家帮帮我。

中间件.js

  app.use(cors())

app.use(cookieSession({
maxAge: 30 * 24 * 60 * 60 * 1000,
keys: [keys.cookieKey]
}))

app.use(compression())

if (process.env.NODE_ENV !== 'production') {
app.use(morgan('tiny'))
}

app.use(bodyParser.json())

app.use(helmet())

app.use(passport.initialize())
app.use(passport.session())

authRoutes.js

  app.get(
'/auth/current_user',
(req, res) => {
res.send(req.user)
console.log(req.user) // UNDEFINED ONLY WITH AXIOS IN REACT APP
}
)

actions.js

axios.defaults.baseURL = process.env.REACT_APP_API_URL

export const fetchUser = () => async dispatch => {
const { data } = await axios.get('/auth/current_user')
console.log('USER DATA: ')
console.log(data === '') // TRUE
dispatch({
type: FETCH_USER,
payload: data
})
}

Passport 配置.js

passport.serializeUser((user, done) => {
done(null, user.id)
})

passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user)
})
})

重现步骤:

当您使用 google 登录时,身份验证流程正常,但是(正如您在“网络”chrome devtools 选项卡中看到的那样)“/auth/current_user”api 请求具有 response.data ===“”

最佳答案

我想我已经找到解决办法了。

后端

首先你必须安装 cors npm install --save cors,然后粘贴此代码。

import cors from 'cors'

app.use(cors({
methods:['GET','POST'],
credentials: true
}))

前端

使用带有凭据和 header 选项的 axios:

const config = {
withCredentials: true,
headers: {
'Content-Type': 'application/json',
},
};
axios.post('http://localhost:8000/routes/register', user, config);

我希望它能帮助您或其他人。

关于node.js - Express + Passport.js : req. 用户未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com