1.7.2 • Published 5 years ago
nextjs-apollo v1.7.2
nextjs-apollo
Server side
new JsonWebToken(private or public keys, options)
const app = express();
const jwt = new JsonWebToken({
apple: fs.readFileSync("apple.pem"),
banana: fs.readFileSync("banana.pem"),
}, { toUser, onSignIn, onSignOut, onRenew });
jwt.applyMiddleware(app);
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context: jwt.contextParser(),
});
apolloServer.applyMiddleware({ app });
// if you enabled subscription
const server = http.createServer(app);
apolloServer.installSubscriptionHandlers(server);
server.listen();toUser()
function toUser({ ...user }) {
return UserModel
}useris plain object from client access token by decodeUserModelany type will assign to context.user
onSignIn()
function onSignIn({ correlationId, ...params }) {
return { issuer, correlationId, isUnfamiliar, ...user };
}correlationIdas http X-Correlation-ID is unique by all clientparamsis plain object from client.signIn(params) is username and password generallyissueris name of private key (option, when single key)isUnfamiliarif is true when response correlationId and userData, but will not get new tokenuseris plain object will encode to token
onSignOut()
function onSignIn({ correlationId, ...params }) {
return { ... };
}correlationIdas http X-Correlation-ID is unique by all clientparamsis plain object from client.signOut(params)
onRenew()
function onRenew({ correlationId, user, issuer, ...params }) {
return { correlationId, ...user };
}correlationIdas http X-Correlation-ID is unique by all clientuseris plain object will encode to tokenissueris name of private key (option, when single key)paramsis plain object from client.renew(params)
Client side
class App extends React.Component{ }
export default App |> withProvider({ uri, http, ws, auth, ...options });urias URL.origin setup server addresshttpis HttpLink optionspathis${url.origin}${path}default/graphql...optionsee apollo-link-http for the options
wspathis${url.origin}${path}default/graphql...optionsee apollo-link-ws for the options
authpathis${url.origin}${path}default/authparamsis plain object will default to signIn, signOut and renew (option)headersis plain object (option)
...optionsee apollo-client
withConsumer()
withQuery()
class Component extends React.Component {
static propTypes = {
results: PropTypes.shape({
[name]: PropTypes.shape(),
}),
[name]: PropTypes.shape(),
loading: PropTypes.bool,
...props,
}
}
const query = gql`query { node { id value } }`;
export default Component |> withQuery(name, query);withConnection()
withConnection(name, query);withCursorPagination()
withCursorPagination(name, query);withOffsetPagination()
withOffsetPagination(name, query);withMutation()
class Component extends React.Component {
static propTypes = {
results: PropTypes.shape({
[name]: PropTypes.shape(),
}),
[name]: PropTypes.func,
...props,
}
onClick = async () => {
const { [name] } = this.props;
await [name](input, options);
}
render() {
return <button onClick={this.onClick} />
}
}
const mutation = gql`
mutation($input: AddPostInput) {
addPost(input: $input) { post: { id } }
}
`;
export default Component |> withMutation(name, mutation);withSubscription()
class Component extends React.Component {
static propTypes = {
results: PropTypes.shape({
[name]: PropTypes.shape(),
}),
[name]: PropTypes.shape(),
loading: PropTypes.bool,
...props,
}
}
const subscription = gql`subscription { onAddPost { id } }`;
export default Component |> withSubscription(name, subscription);withAuthorized()
class Component extends React.Component { }
export default Component |> withAuthorized(redirect, { disabled });