2017-03-31 50 views
1

我试过一切,以解决我收到的CORS错误。如果是OAuth流,重定向您的应用程序Salesforce的登录屏幕(但这个网址自动重定向场景从Salesforce到Salesforce后)Salesforce Oauth重定向CORS问题节点快递应用

的XMLHttpRequest不能从Salesforce URL 1加载Salesforce的URL 2重定向到Salesforce的OAuth网址2已被CORS策略阻止:否 “访问控制允许来源”标题存在于请求的 资源中。原因'http://localhost:3000'因此不允许 访问。

我已经安装了CORS模块也试过这样:

app.use('/public',function(req, res, next) { 
res.setHeader("Access-Control-Allow-Origin", "*"); 
// Request headers you wish to allow 
res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested- 
With, Content-Type, Accept");  
// Set to true if you need the website to include cookies in the 
requests sent 
res.setHeader('Access-Control-Allow-Credentials', true); 
// Pass to next layer of middleware 
next(); 
}); 

谁能真正得到这方面的工作,并帮助?

+0

错误消息表明它是一个Salesforce URL,它的响应中未发送Access-Control-Allow-Origin。在您自己的快速应用程序中启用CORS不会解决这个问题。因此,您需要确定是否有一些Salesforce文档解释了您正在尝试执行的任何操作的受支持方式,或者使用https://github.com/Rob-Code中的代码设置CORS代理。 -W/cors-任何地方或某处 – sideshowbarker

+1

您无法通过XMLHttpRequests执行OAuth。 – idbehold

回答

0

我刚刚写了一篇博客几天回:http://nodexperts.com/blog/salesforce-oauth-using-nodejs/

首先,这将帮助你在你的节点快速的应用程序设置的OAuth2和Salesforce很多。

另一件事是,你可以从你的应用程序 - > SalesForce登录应用程序 - > your_redirect_uri。

当您从服务器到服务器执行此操作时,您将只会收到CORS错误。

所以,如果你有一个应用程序有一些UI和一些用户交互,那么我建议你从客户端代码重定向到SalesForce页面。

这里是你如何重定向使用表达 ROURE和jsforce NPOM包登录的Salesforce的页面片段:

app.get('/oauth2/auth', function(req, res) { 
    const oauth2 = new jsforce.OAuth2({ 
    clientId: process.env.CLIENT_ID, 
    clientSecret: process.env.CLIENT_SECRET_ID, 
    redirectUri: `${req.protocol}://${req.get('host')}/${process.env.REDIRECT_URI}` 
    }); 
    res.redirect(oauth2.getAuthorizationUrl({})); 
}); 

这就是你如何设置您的Salesforce conncted应用,重定向URL :

app.get('/redirect_uri', function(req,res) { 
    const oauth2 = new jsforce.OAuth2({ 
    clientId: process.env.CLIENT_ID, 
    clientSecret: process.env.CLIENT_SECRET_ID, 
    redirectUri: `${req.protocol}://${req.get('host')}/${process.env.REDIRECT_URI}` 
    }); 
    const conn = new jsforce.Connection({ oauth2 : oauth2 }); 

    conn.authorize(req.query.code, function(err, userInfo) { 
    if (err) { 
     return console.error(err); 
    } 
    console.log(conn.accessToken); 
    }); 
}); 

希望,一切都很清楚,如有任何澄清请告知我。

+0

如果我不想将用户重定向到auth salesforce网页,该怎么办?我只想登录并获取访问令牌是在jsforce中可行或者我必须实现SF REST API? – user269867