Skip to content

Instantly share code, notes, and snippets.

View maticzav's full-sized avatar
🎉
Keep moving forward!

Matic Zavadlal maticzav

🎉
Keep moving forward!
View GitHub Profile
const authLink = new ApolloLink((operation, forward) => {
AsyncStorage.getItem('token').then(token => {
operation.setContext(({ headers = {} }) => ({
headers: {
...headers,
Authorization: token ? `Bearer ${token}` : null
}
}))
return forward(operation)
// src/github.ts
import * as fetch from 'isomorphic-fetch'
export async function getGithubToken(githubCode: string): Promise<string> {
const endpoint = 'https://github.com/login/oauth/access_token'
const data = await fetch(endpoint, {
method: 'POST',
headers: {
# database/datamodel/types.graphql
type User {
id: ID! @unique
createdAt: DateTime!
updatedAt: DateTime!
githubUserId: String! @unique
# prisma.yml
# The name of our project
service: graphql-server-github-auth-example
# Development stage on local cluster
stage: dev
cluster: local
# Our datamodel
datamodel:
// src/index.ts
import { Prisma } from './generated/prisma'
new Prisma({
endpoint: process.env.PRISMA_ENDPOINT,
secret: process.env.PRISMA_SECRET
})
# src/schema.graphql
# import User, Note from './generated/database.graphql'
type Query {
me: User,
note(id: ID!): Note
}
type Mutation {
// src/resolvers/index.ts
import { me } from './Query/me'
import { auth } from './Mutation/auth'
export const resolvers = {
Query: {
me,
},
Mutation: {
...auth,
// src/resolvers/Mutation/auth.ts
import * as jwt from 'jsonwebtoken'
export const auth = {
authenticate: async (parent, { githubCode }, ctx: Context, info) => {
// ...
return {
token: jwt.sign({ userId: user.id }, process.env.JWT_SECRET), // <- Sign in
user
// src/resolvers/index.ts
import { note } from './Query/note'
import { notes } from './Mutation/notes'
export const resolvers = {
Query: {
note,
},
Mutation: {
...notes
# To Authenticate
mutation Authenticate($githubCode: String!) {
authenticate(githubCode: $githubCode) {
token
user {
name
}
}
}