【发布时间】:2017-11-14 13:02:31
【问题描述】:
在用户验证/登录之前不应建立连接时,我对如何构建我的 React/GraphQL (Apollo) 应用程序感到有些困惑。
目前我有这个:
class App extends Component {
render() {
return (
<ApolloProvider client={client}>
<Provider store={store}>
<Router>
<div>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/login">Log In</Link></li>
<li><Link to="/signup">Sign Up</Link></li>
</ul>
<AuthenticatedRoute exact path="/" component={HomePage} />
<Route path="/login" component={LoginPage} />
<Route path="/signup" component={SignupPage} />
</div>
</Router>
</Provider>
</ApolloProvider>
);
}
}
下面是网络接口的创建:
const networkInterface = createNetworkInterface({
uri: process.env.NODE_ENV === 'development'
? 'http://localhost:3000/graphql'
: 'TBD',
});
networkInterface.use([
{
applyMiddleware(req, next) {
if (!req.options.headers) {
req.options.headers = {}; // Create the header object if needed.
}
getUserSession()
.then(session => {
// get the authentication token from local storage if it exists
// ID token!
req.options.headers.authorization = session
.getIdToken()
.getJwtToken();
})
.catch(err => {
console.error('oh, this is bad');
})
.then(next);
},
},
]);
我该如何组织,以便 Apollo 客户端仅在用户通过身份验证后才初始化和设置一次?
我想知道是否可以使用withApollo 以某种方式直接访问客户端并以这种方式完成 GraphQL 身份验证和连接。
想法 2
使用 Redux 跟踪用户状态,用 connect 包裹 App。当用户进行身份验证时,这会触发 Redux 状态更改,从而触发 App 的 componentDidUpdate,这可能会为 Apollo 创建网络接口,从而导致 App 重新渲染,这会将授权的 client 传递给 @987654330 @。
【问题讨论】:
标签: reactjs graphql apollo react-apollo apollo-client