You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React应用调用Google授权服务器时出现302状态码CORS错误

解决Google OAuth授权的CORS错误问题

问题原因

你用axios.get请求Google授权URL的方式是错误的。Google的OAuth授权服务器不支持AJAX跨域请求,浏览器的同源安全策略会拦截这类请求——因为Google没有在响应头中添加Access-Control-Allow-Origin: localhost:3000,所以触发CORS错误。而直接在浏览器地址栏打开该URL能正常跳转,是因为这属于浏览器顶级导航,不受AJAX跨域规则限制。

正确解决方案

1. 修改前端逻辑:直接跳转至授权URL

把前端中await axios.get(data.authorizationUrl)的AJAX请求替换成页面跳转,让浏览器直接导航到Google授权页面:

const List = () => {
    useEffect(() => {
        const fun = async () => {
            try {
                const { data } = await axios.get('/log')
                // 直接跳转至Google授权页面
                window.location.href = data.authorizationUrl;
            } catch (error) {
                console.log(error.message)
            }
        }

        fun()

   }, [])

    return (
        <div className='list-container'>
        </div>
    )
}

2. 完善后端回调路由

Google授权完成后会跳转到你配置的YOUR_REDIRECT_URL(建议设为后端的回调路由,比如http://localhost:4000/auth/callback),需要在后端新增该路由处理授权回调、获取访问令牌:

// 后端新增授权回调路由
app.get('/auth/callback', async (req, res) => {
    const { code } = req.query;
    try {
        // 用授权码换取access token
        const { tokens } = await oauth2Client.getToken(code);
        oauth2Client.setCredentials(tokens);
        
        // 调用YouTube API获取用户点赞视频
        const youtube = google.youtube({ version: 'v3', auth: oauth2Client });
        const likedVideosRes = await youtube.videos.list({
            part: 'snippet,contentDetails',
            myRating: 'like'
        });
        
        // 将结果返回给前端(可选择重定向到前端页面并携带数据)
        res.redirect(`http://localhost:3000/liked-videos?data=${encodeURIComponent(JSON.stringify(likedVideosRes.data))}`);
    } catch (error) {
        console.error('授权回调失败:', error);
        res.status(500).send('授权失败');
    }
});

3. 确认Google控制台配置

确保在Google开发者控制台的OAuth 2.0客户端ID设置中,重定向URI填写的是后端的回调路由(比如http://localhost:4000/auth/callback),而非前端地址。

额外说明

前端package.json中的proxy配置仅对请求后端API有效,无法作用于Google的外部服务器。OAuth授权的正确流程是:前端跳转至Google授权页 → 用户完成授权 → Google跳回后端回调路由 → 后端处理令牌并调用YouTube API → 后端将结果反馈给前端。

内容的提问来源于stack exchange,提问作者sagar patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:18:12