Как войти в социальную сеть с помощью сервера Apollo?

#javascript #node.js #typescript #graphql #apollo

Вопрос:

на этот раз я хотел использовать различные технологии для бэк-энда. Поэтому я пошел с prisma , apollo-server , и typegraphql для моего API graphql. более подробную информацию вы можете найти здесь

После установки этих пакетов я хотел войти в социальную сеть с помощью Google. После небольшого исследования я обнаружил, что passport js amp; passport-google-oauth2 рекомендуется для бэкэндов node js. Тем не менее, почти 90% этих учебников используют express js , и, насколько я знаю, вы не можете использовать подход «сначала код» с помощью express-graphql(он использует подход «сначала sdl», и я хочу попробовать typegraphql, если смогу), так есть ли способ реализовать социальный вход в мой API без использования express?

индекс.ts

 import 'reflect-metadata'
import * as tq from 'type-graphql'
import { ApolloServer } from 'apollo-server'
import { ProfileResolver, UserResolver } from './resolvers'

const PORT = process.env.PORT || 5000

const app = async () => {
    const schema = await tq.buildSchema({resolvers: [UserResolver, ProfileResolver]})

    const server = new ApolloServer({ 
        schema,
        context: {

        }
    })

    const { url } = await server.listen(PORT)
    console.log(`Server is running at ${url}`)
}

app()
 

При необходимости я могу поделиться другими файлами.

P. S: Я новичок в apollo и typegraphql. Я следил за их документами, но все, что написано об аутентификации, — это JWT. Ни в одном из них не упоминается социальный логин.

Ответ №1:

Я буду честен, я не слишком знаком с apollo-server или typegraphql , или даже с созданием конечной точки GraphQL в целом. Но я знаю некоторые основные концепции, и я постараюсь сделать все возможное, чтобы дать вам отправную точку для поиска решения.

Социальные логины обычно используют протокол OAuth2, и те, как правило, используют JWTs для маркера аутентификации. Вот почему в документах упоминаются JWTs.

GraphQL не нужно ничего знать об операции, кроме того, какие данные ожидаются, какие данные должны быть возвращены и какую фактическую службу вызывать для этой операции. Мне нравится думать о GraphQL как об обычном интерфейсе для доступа к сервисам. Он не должен ничего знать об аутентификации, OAuth2 и т. Д. Таким образом, любая конечная точка GraphQL, которую вы создаете, может вызвать другую службу для обработки аутентификации и вернуть данные, которые вы ожидаете для аутентификации: JWT, ошибка и т. Д.

Комментарии:

1. Да, вы правы, на самом деле, я решил свою проблему, оказалось, что вы можете использовать подход, основанный на первом коде, с помощью express js.