簡體   English   中英

如何解決 socket.io laravel 和 nodejs 信號應用中的 cors 錯誤

[英]How to solve cors error in socket.io laravel and nodejs signalling app

我有一個用 laravel 和 socket.io 構建的聊天應用程序。 我的 laravel 應用程序位於一個域中,而我的 nodejs 應用程序位於另一個域中。 連接到我的 nodejs 信號應用程序會出現 cors 錯誤,而 nodejs 應用程序也會返回 cors 錯誤。 這是我的 nodejs 應用程序

"use strict";

require('dotenv').config();

const express = require('express');
const app = express();
const fs = require('fs');
const options = {
        key: fs.readFileSync(process.env.KEY_PATH),
        cert: fs.readFileSync(process.env.CERT_PATH)
    };
const https = require('https').Server(options, app);
const io = require('socket.io')(https);
io.origins('*:*');
const listner = https.listen(process.env.PORT, function() {
    console.log('Listening on ', listner.address().port);
});

//allow only the specified domain to connect
io.set('origins', process.env.DOMAIN + ':*');

require('./socket')(io);

app.get('/', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   // Add this
   if (req.method === 'OPTIONS') {
        res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, OPTIONS');
        res.header('Access-Control-Max-Age', 120);
        return res.status(200).json({});
    }
    res.send('Ok');
  
    next();

我在 Laravel 后端安裝了一個 cors 中間件,但沒有任何區別。 任何幫助將不勝感激

您需要刪除這兩行。 cos,您首先設置了任何來源,並且您已經使用 env 指定了域。

io.origins('*:*');
io.set('origins', process.env.DOMAIN + ':*');

允許用戶的確切方法是

// process.env.DOMAIN == "https://anydomain.com:port"
// process.env.DOMAIN != "anydomain.com:port"
const options={
 cors:true,
 origins:[process.env.DOMAIN],
}
const io = require('socket.io')(https, options);

確保在后端正確設置了 CORS 配置。 另請注意,有時 Apache 或其他環境的默認設置可能與您應用的設置沖突。

最簡單的方法是使用laravel-cors

另一種方法是將此代碼放在 public/index.php 文件中

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS, post, get');
header("Access-Control-Max-Age", "3600");
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
header("Access-Control-Allow-Credentials", "true");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM