2017-02-07 15 views
1

當我把下面在查詢用戶模型我能夠讓整個用戶對象由graphQL作爲查詢包括id屬性一個陣營組成:如何返回Apollo中用戶對象的id屬性?

console.log(this.props.data.user) 

但是,當我嘗試訪問id屬性從代碼:

console.log(this.props.data.user) // undefined 
console.log(this.props.data.user.id) 
// error cannot get property of undefined 

我的第一個猜測是,這是一個安全功能;我正在使用Auth0和Graphcool。

但我可能只是以倒退的方式來解決這個問題。如果是這樣,任何幫助以正確的方式訪問用戶ID將不勝感激。

謝謝

回答

3

這包括在FAQ article on the logged in user

獲取簽署JWT與Auth0

user查詢返回當前已驗證用戶。所以首先我們必須考慮如何確定通過身份驗證的用戶。

當前最先進的技術是using verified JWT並將它們作爲Authorization標頭傳遞。

在Auth0 Lock中輸入有效憑證後,它將返回一個使用您的密鑰Auth0密鑰簽名的JWT。這個簽名的JWT被髮送到GraphQL服務器,我們將使用您的Auth0密鑰來驗證它,如果它屬於有效的用戶,則請求會被認證。

設置Authorization頭與阿波羅客戶

所以我懷疑你根本就沒有經過有效的Authorization頭。通過Apollo,你可以使用它來確保如果存在令牌即可。請注意,我們將使用本地存儲從Auth0鎖定存儲令牌:

const networkInterface = createNetworkInterface({ uri: 'https://api.graph.cool/simple/v1/__PROJECT_ID__' }) 

// use the auth0IdToken in localStorage for authorized requests 
networkInterface.use([{ 
    applyMiddleware (req, next) { 
    if (!req.options.headers) { 
     req.options.headers = {} 
    } 

    // get the authentication token from local storage if it exists 
    if (localStorage.getItem('auth0IdToken')) { 
     req.options.headers.authorization = `Bearer ${localStorage.getItem('auth0IdToken')}` 
    } 
    next() 
    }, 
}]) 

const client = new ApolloClient({ networkInterface }) 

檢查this Auth0 example codethe live demo來看看它是如何工作的。

您可能也有興趣this answer on authorization (permissions)

+0

謝謝,但我實際上使用你建議的github項目。它正在與認證,查詢,突變,整個工作。 –

+0

你可以在你的代碼中添加更多的上下文嗎?也許你正在'data.loading'之前訪問'data'。 – marktani

+0

'data.loading'爲false之前,也就是說。 – marktani