#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.