我有一个运行中的React/Node/Express网络应用程序,其中有两个独立的服务器。React在
我遇到的问题是我的API的一部分需要重定向用户到一个页面,从Spotify API获取令牌,然后在成功验证后重定向回我的正确页面。
API调用代理是这样完成的:
到目前为止,这个方案非常好,因为我可以完全分离我的React和Node服务器。
如我上面提到的,我需要通过后端API调用将我的React前端重定向到另一个页面(Spotify认证),以对用户进行身份验证,然后Spotify在用户允许或拒绝访问他们的Spotify帐户之后将其重定向回我的站点。
在我的前端 - localhost:8080上,用户点击一个按钮,调用这个函数。
当我在前端点击登录按钮时,会得到以下响应,我认为这是来自Spotify的响应,因为我可以成功地向我的API请求其他端点的跨源请求。
无法加载... 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,来自“null”的来源不允许访问。
然而,当我手动导航到localhost:3000/login时,重定向有效,并且我被发送到Spotify身份验证页面。
此外,我尝试将我的前端重定向到任何URL,但都没有成功。
因此,我的问题是,如何通过不服务于我的静态前端内容的服务器从API调用重定向我的前端?
localhost:8080
上运行,并代理API请求到运行在localhost:3000
上的node服务器。这将是我的生产设置,如果可能的话,我想保留这种结构。我遇到的问题是我的API的一部分需要重定向用户到一个页面,从Spotify API获取令牌,然后在成功验证后重定向回我的正确页面。
API调用代理是这样完成的:
const axios = require('axios');
const axiosInstance = axios.create({
baseURL: process.env.NODE === 'production' ? '' : 'http://localhost:3000'
});
module.exports = axiosInstance;
到目前为止,这个方案非常好,因为我可以完全分离我的React和Node服务器。
如我上面提到的,我需要通过后端API调用将我的React前端重定向到另一个页面(Spotify认证),以对用户进行身份验证,然后Spotify在用户允许或拒绝访问他们的Spotify帐户之后将其重定向回我的站点。
在我的前端 - localhost:8080上,用户点击一个按钮,调用这个函数。
authenticate = () => {
axios.get('/login')
.then(data => console.log(data));
}
这个端点在localhost:3000
上被调用。
router.get('/', (req, res) => {
let scopes = 'user-read-private user-read-email';
let client = process.env.SPOTIFY_CLIENT;
let redirect = 'http://localhost:3000/login/redirect';
res.redirect(`https://accounts.spotify.com/authorize?response_type=code'
&client_id=${client}${scopes ? `&scope=${encodeURIComponent(scopes)}` : ''}
&redirect_uri=${encodeURIComponent(redirect)}&state=${state}`);
});
当我在前端点击登录按钮时,会得到以下响应,我认为这是来自Spotify的响应,因为我可以成功地向我的API请求其他端点的跨源请求。
无法加载... 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,来自“null”的来源不允许访问。
然而,当我手动导航到localhost:3000/login时,重定向有效,并且我被发送到Spotify身份验证页面。
此外,我尝试将我的前端重定向到任何URL,但都没有成功。
因此,我的问题是,如何通过不服务于我的静态前端内容的服务器从API调用重定向我的前端?
redirect_uri=${encodeURIComponent(redirect)}
。如果所有对该API的请求都将被代理,则将查询中的端口更改为8080。 - I Want Answers