我有一个快速 API 服务器,另外还有一个没有代理的 create-react-app 应用程序。我将passport.js 用于OAuth,它在MongoDB 中查找以反序列化用户。
在后端,我设置了 cors 中间件,在前端,我用我的服务器 URL 配置了 axios 基本 URL。
在 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
}
)
动作.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
})
}
护照-config.js
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user)
})
})
重现步骤:
- 克隆服务器https://github.com/darioielardi/triplan-server
在服务器上: npm run start-dev
- 在客户端:npm start
当您使用谷歌登录时,身份验证流程正确,但是(正如您在“网络”chrome devtools 选项卡中看到的那样)'/auth/current_user' api 请求具有 response.data === ""