簡體   English   中英

不是Access-Control-Allow-Origin *,但Chrome堅持認為是(升級apollo服務器后)

[英]Access-Control-Allow-Origin is not * but Chrome insists it is (after upgrading apollo-server)

我需要apollo-server提供的一些功能,並花了一些時間將我的代碼重構為它(以前使用過express-graphql )。 現在唯一的問題是我的Web應用程序之間(使用apollo-client )對經過身份驗證的請求存在“ CORS”問題。 我記得在1.x版本中也遇到過這個問題,並花了很多時間來解決這個問題,但是我以前的解決方案在2.x版本中不起作用,並且將非常感謝為設法做到這一點的任何人提供的幫助工作。

  • 我的webapp托管在localhost:8081
  • 我的服務器托管在localhost:4000

這里逐字逐句地看一下代碼,我有以下內容:

客戶代碼

const client = new ApolloClient({
    link: createHttpLink({
        uri: 'http://localhost:4000/graphql', 
        credentials: 'include'
    })
})

服務器代碼

// Initializing express app code 
var app = ....
// Using cors
app.use(cors({
    credentials: true, 
    origin: 'http://localhost:8081',
}));

// Apollo Server create and apply middleware
var apolloServer = new ApolloServer({ ... });
apolloServer.applyMiddleware({ app })

當客戶端通過查詢后端時。 apollo-client ,我在Chrome中收到以下錯誤:

在此處輸入圖片說明

但是,在服務器代碼中,我明確設置了起點。 當我在控制台中檢查網絡請求時,我看到了一個矛盾的故事,並且Access-Control-Allow-Origin明確設置為http://localhost:8081

在此處輸入圖片說明

使用Insomnia查詢后端服務器並獲得預期結果時,我沒有遇到此問題。 有沒有人在localhost上的客戶端和服務器上設置apollo並成功進行身份驗證的經驗?

我其實只是傻瓜。 我正在查看錯誤的響應,出現了sideshowbarker, apollo-server-v2自動覆蓋CORS,並將Access-Control-Allow-Origin標頭默認設置為*。 即使您的快速應用程序指定了CORS並將其作為中間件應用到apollo-server ,該設置也會被GraphQL路由覆蓋。 如果有人遇到此問題,希望可以節省一些時間:

https://github.com/apollographql/apollo-server/issues/1142

現在,您可以在其applyMiddleware方法中為apollo-server明確指定CORS: https : applyMiddleware

暫無
暫無

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

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