0

我想從我的中間件內的localStorage獲得授權頭。不幸的是,這不適用於首頁加載,因爲它是服務器呈現的。Nuxt窗口沒有在服務器端渲染定義

我該如何解決這個問題?

const cookieName = 'feathers-jwt'; 
import { ApolloClient, createNetworkInterface } from 'apollo-client'; 
import 'isomorphic-fetch'; 

const API_ENDPOINT = 'http://localhost:3000/graphql'; 

const networkInterface = createNetworkInterface({ uri: API_ENDPOINT }); 

networkInterface.use([{ 
    applyMiddleware(req, next) { 
    if (!req.options.headers) { 
     req.options.headers = {}; // Create the header object if needed. 
    } 
    req.options.headers['authorization'] = window.localStorage.getItem(cookieName); 
    next(); 
    } 
}]); 

const apolloClient = new ApolloClient({ 
    networkInterface, 
    transportBatching: true 
}); 

export default apolloClient; 

來源:http://dev.apollodata.com/core/network.html

回答

1

據我瞭解,當你渲染服務器上,你沒有訪問windowdocument。在服務器和客戶端都呈現的應用程序中,您需要構建一個檢查來查看您的位置,並據此處理。

您可以使用此代碼段用於檢測你在哪裏:

var canUseDOM = !!(
    typeof window !== 'undefined' && 
    window.document && 
    window.document.createElement 
) 

用它來檢查,如果你正在運行的服務器端或客戶端。在你的情況下,我會做以下事情:

  1. 如果你是服務器端,你可以檢查HTTP請求本身的cookie;
  2. 如果你是客戶端,你可以檢查你的localStorage商店。

當然,您可以隨時選擇在服務器端將您的網站默認爲匿名未授權用戶。但是這會導致前端閃爍進入授權狀態,並且會讓用戶煩惱。

就你而言,我會嘗試從HTTP請求中存在的實際cookie中查找授權cookie。

相關問題