Salesforce Oauth 重定向 CORS 问题节点快速应用程序

Posted

技术标签:

【中文标题】Salesforce Oauth 重定向 CORS 问题节点快速应用程序【英文标题】:Salesforce Oauth redirect CORS issue node express app 【发布时间】:2017-08-26 07:26:42 【问题描述】:

我已尽一切努力解决收到的 CORS 错误。对于 oauth 流程,将您的应用程序重定向到 Salesforce 登录屏幕(但此 url 会在后台自动从 salesforce 重定向到 salesforce)

XMLHttpRequest 无法加载 salesforce url 2 从 salesforce 重定向 url 1 到 salesforce oauth url 2 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“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();
);

任何人都可以真正得到这个工作和帮助吗?

【问题讨论】:

错误消息表明它是一个 Salesforce URL,它没有在其响应中发送 Access-Control-Allow-Origin。在你自己的 express 应用中启用 CORS 并不能解决这个问题。所以你需要弄清楚是否有一些 Salesforce 文档解释了支持的方式来做你想做的任何事情,或者使用来自 github.com/Rob--W/cors-anywhere 或其他地方的代码设置 CORS 代理 您不能通过 XMLHttpRequests 进行 OAuth。 【参考方案1】:

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

首先,这将极大地帮助您在 Node-Express 应用中设置 OAuth2 和 SalesForce。

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

只有在服务器到服务器之间执行此操作时才会出现 CORS 错误。

因此,如果您的应用具有一些 UI 和一些用户交互,那么我建议您从您的客户端代码重定向到 SalesForce 页面。

这是一个关于如何使用 express roure 和 jsforce npom 包重定向到 Salesforce 登录页面的 sn-p:

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 连接的应用程序,重定向 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);
  );
);

希望,一切都清楚了,如果有任何澄清,请告诉我。

【讨论】:

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

以上是关于Salesforce Oauth 重定向 CORS 问题节点快速应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在没有用户名和密码的情况下授权 Salesforce REST API

CORS 请求重定向失败

重定向被 CORS 阻止

Salesforce REST API 登录?

cors - 预检响应无效(重定向) - redux

如何在 nodejs express 重定向上启用 CORS?