2016-10-11 66 views
0

我快速設置看起來是這樣的:不能得到表達,graphql沿Passport用戶現場通過

// Set up router for the /api route. 
const apiRouter = express.Router(); 

// Passport auth only applies to /api endpoints, not static resources 
// or js bundles. 
apiRouter.use(passport.initialize()); 

// (more passport initialization omitted for clarity) 
// (other routes are added here, also omitted) 

// Set up the graphql middleware 
apiRouter.use('/gql', graphql(req => ({ 
    schema, 
    rootValue: { db: req.db, user: req.user, req }, 
})); 

// Now add the router to our app 
app.use('/api', apiRouter); 

Exerything作品除了在我的graphql解析方法是req.user總是undefined。所有添加到apiRouter的其他路由都可以看到req.user。請求對象上的其他屬性如req.db無處不在。就好像graphql中間件在護照中間件之前執行,但我的理解是,首先聲明的中間件也首先執行。

+0

如果它返回'null'而不是'undefined',那肯定表明這個值已經發生了。您確定後端具有與此特定響應關聯的用戶值嗎? 'null'是它從某個地方返回的值,否則就是'undefined'。 – Dandy

+0

對不起,我應該說undefined。 – Talin

+0

我們需要看你的代碼處理傳遞'req'參數的請求。這肯定不會傳遞給用戶,但是我看不到'graphql'包中會干擾這個的任何內容。 – Dandy

回答

2

原來,客戶端的fetch()缺少「credentials:'same-origin'」選項,因此沒有發送cookie,導致護照中間件未設置用戶字段。