javascript - Node header 已设置,但某些用户遇到访问控制错误

标签 javascript node.js

我有一个运行以下 header 代码的 Node 服务器:

    app.all('/*', function (req, res, next) {
    // CORS headers
    res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    // Set custom headers for CORS
    res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
    if (req.method == 'OPTIONS') {
        res.status(200).end();
    } else {
        next();
    }
});

现在,在许多计算机和浏览器上,这都可以正常工作(包括我自己的),但是不在我办公室的人会收到以下错误消息:

enter image description here

好吧,这有点难以阅读,所以这里有两个错误:

  1. 无法加载资源:Access-Control-Allow-Origin 不允许来源 http://angular.mydomain.com
  2. XMLHttpRequest 无法加载 http://angular.mydomain.com:8080/login。 Access-Control-Allow_origin 不允许来源 http://angular.mydomain.com

谁能告诉我这是怎么回事?

标题

enter image description here

登录路径:

router.route('/login')
.post(function (req, res) {
    var user = User.build();

    var username = req.body.username || '';
    var password = req.body.password || '';

    if (username == '' || password == '') {
        res.status(401);
        res.json({
            "status": 401,
            "message": "Invalid credentials"
        });
        return;
    }
    var salt = bcrypt.genSaltSync(10);
    var hash = bcrypt.hashSync(password, salt);


    user.retrieveByNamePassword(username, function (users) {
        var i = 0;
        if (bcrypt.compareSync(password, users.password)) {
            var log = User_Login.build()
            log.findLastLogin(users.id, function (result) {
                users.last_login = result;
                if (users.user_type_id > 3) {
                    res.json(genToken(users, null));
                }
                else {
                    var div = Division.build();
                    selected_user = users;
                    var root = [selected_user.division_id];
                    div.retrieveByDivisionId(selected_user.division_id, function (division) {
                        var result = [];
                        var root = [division];
                        (function loop() {
                            var element = root[0];
                            var divisions = Division.build();
                            divisions.retrieveByParentId(element.id, function (divisions) {
                                if (divisions) {
                                    divisions.forEach(function (division) {
                                        root.push(division);
                                    });
                                    result.push(element.id);
                                    root.splice(0, 1);
                                    if (root.length > 0) {
                                        loop()
                                    }
                                    else if (root.length == 0) {
                                        res.json(genToken(users, result));
                                    }
                                } else {
                                    res.send(401, "No division found");
                                }
                            });
                        }());
                    })
                }
            }, function (error) {
                var i = 0;
            });

        } else {
            // If authentication fails, we send a 401 back
            res.status(401);
            res.json({
                "status": 401,
                "message": "Invalid credentials"
            });
            return;
        }
    }, function (error) {
        res.status(401);
        res.json({
            "status": 401,
            "message": "Invalid credentials"
        });
        return;
    });
});

最佳答案

也许他收到了 404 或类似代码,表示无法从该外部网络访问资源。

关于javascript - Node header 已设置,但某些用户遇到访问控制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847416/

相关文章:

javascript - NodeJs : TypeError: require(. ..) 不是函数

javascript - jQuery.getScript 能否在 Chrome 开发者工具中将文件显示为资源?

javascript - 向下滚动时我希望标题部分修改并在高度、填充等方面变短

node.js - 使用 Web 应用程序 (Express.js) 中的 NTLM 身份验证对本地 (IFD) CRM 进行身份验证

node.js - SMTP 到 SMTP 协议(protocol)

MYSQL访问控制

javascript - 从 NodeJs 上的字体标签中提取文本

javascript - 使用 sinon stub ES6 原型(prototype)方法

javascript - HTML5 Canvas 和 javascript 奖轮

node.js - 为什么 NodeJS 域文档代码尝试终止该进程?