【问题标题】:From node server I couldn't go to another domain从节点服务器我不能去另一个域
【发布时间】:2017-04-07 09:17:21
【问题描述】:

我正在将 PayUmoney 支付网关集成到我的 MEAN 堆栈应用程序中。我正在获取从角度控制器到节点的每个必填字段,并且还生成了哈希键。之后我不会重定向到'https://test.payu.in/_payment'。我已经尝试过如下

app.js

router.post('/buyItem',function(req,res){
    var KEY = "OygoFs";
    var SALT = "BV1QBwCv";

    var shasum = crypto.createHash('sha512'),
        reqData = req.body;
        dataSequence = KEY + '|' + reqData.txnid + '|' + reqData.amount + '|' + reqData.productinfo + '|' + reqData.firstname + '|' + reqData.email + '|||||||||||' + SALT;
        resultKey = shasum.update(dataSequence).digest('hex');
    res.redirect('https://test.payu.in/_payment');
});

当我运行这个错误来了。

XMLHttpRequest cannot load http://locahost:3000/api/buyItem. Redirect from 'http://locahost:3000/api/buyItem' to 'https://test.payu.in/_payment' has been blocked by CORS policy: Request requires preflight, which is disallowed to follow cross-origin redirect.

【问题讨论】:

    标签: angularjs node.js payment-gateway mean-stack payumoney


    【解决方案1】:

    您需要将重定向 URL 配置为白名单资源,以确保用于采购 Angular 模板的 URL 是安全的。

    app.config(['$sceDelegateProvider', function($sceDelegateProvider) {
             $sceDelegateProvider.resourceUrlWhitelist(['self', 'https://test.payu.in/_payment/**']);
    
    }]);
    

    来自文档:https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider

    【讨论】:

      【解决方案2】:

      在 payUmoney 本身授权您之前,您的 NodeJs-Express 无法向 payu money 发送请求, 这就是你得到CORS错误的原因, CORS 表示-跨域资源共享 这意味着当您尝试从 www.example2.com 访问 www.example1.com 时。

      所以这个问题的解决方案是你必须在你重定向到的 PayUmoney 服务器中设置 CORS 过滤器。 您不能只将其发送到已部署的任何服务器或应用程序,因为它们总是禁用 CORS 过滤器以采取安全措施。 如果你想检查你的重定向功能, 这是你可以做的, 让另一个 NodeJs 服务器运行,它正在监听 API 调用。 并在 app.js(server-side) 中添加这些行:

          app.all('/*', function(req, res, next) {
          res.header("Access-Control-Allow-Origin", "*");
          res.header("Access-Control-Allow-Headers", "X-Requested-With");
          res.header("Access-Control-Allow-Methods", "GET, POST, PUT");
          next();
      });
      

      注意:其中 app 是对 express 的引用 (var app = require('express');)。

      现在重定向到这个新创建的 NodeJs 应用, 您的重定向功能肯定会起作用。

      希望这会有所帮助, 问候 肖希尔

      【讨论】:

      • 我已经在我的节点服务器中添加了上面的行,但它不工作
      • 您不必将它添加到您的服务器中,它必须添加到您发送请求的服务器中。此代码用于接受来自任何服务器的跨域,仅用于测试目的。
      • @Kevin 尝试理解,CORS 配置在您希望成功接收请求的位置。而不是来自发送源。这就是我说的原因,
      • 如果您正在尝试测试重定向功能,那么尽管向 payUmoney 发送请求,但仍将其发送到一个新的 Localhost NodeJs-Express 应用程序,其中需要插入 ii 给您的代码。希望它有帮助,谢谢你问候Shohil
      • 您必须收到此错误,状态码为:405,这意味着 FORBIDDEN 这是因为 payUmoney 无法识别您的服务器端请求并引发 CORS 错误。
      猜你喜欢
      • 2019-11-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2019-08-22
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      相关资源
      最近更新 更多