请求的资源上不存在“Access-Control-Allow-Origin”标头。 - React / Node API

时间:2017-08-03 14:40:36

标签: node.js api reactjs cross-domain passport.js

我正在尝试通过Twitter获得护照认证。我的设置如下:React(with redux)前端(create-react-app),Node(with express)API。两者都在localhost(不同的端口)上运行 用户转到/login并单击调度登录操作的按钮:

export function login() {
    return dispatch => {
        return axios.get('/api/auth/twitter')
          .then(() => {})
    }
}

服务器上的路线:

router.get('/twitter', passport.authenticate('twitter'));

回调的路线:

router.get('/twitter/callback', passport.authenticate('twitter', {failureRedirect: '/login'}), loginSuccess);

loginSuccess目前什么都不做。

这是我得到的完整错误:
XMLHttpRequest cannot load https://api.twitter.com/oauth/authenticate?oauth_token=fGVctgAAAAAA1y22AAABXah3t3o. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:3000' is therefore not allowed access.

我正在将来自反应前端(localhost:3000)的请求代理到localhost:8080。

如果我进入chrome devtools的网络标签并从twitter api中选择响应,它看起来像这样:enter image description here

如果有人知道如何使用passport-twitter身份验证来处理这种设置,请告诉我。

1 个答案:

答案 0 :(得分:1)

悲伤的消息,Twitter不允许你调用它的API客户端,你需要一台服务器才能做到这一点:(

看看这个Quora answer