如何使用 Apollo Server 进行社交登录?

问题描述

这次我想为后端使用不同的技术。所以我为我的 graphql API 使用了 prismaapollo-servertypegraphqlyou can find more info here

安装这些软件包后,我想使用 Google 进行社交登录。经过一些研究,我发现 passport jspassport-google-oauth2 被推荐用于 node js 后端。但是,这些教程中几乎 %90 使用 express js,据我所知,您不能将代码优先方法与 express-graphql 一起使用(它使用 sdl 优先方法,如果可以,我想尝试使用 typegraphql)那么有没有一种方法可以在不使用 express 的情况下实现对我的 API 的社交登录

index.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()

如果需要,我可以共享其他文件

PS:我是 apollo 和 typegraphql 的新手。我遵循了他们的文档,但所有关于身份验证的内容都是 JWT。他们都没有提到社交登录

解决方法

老实说,我不太熟悉 apollo-servertypegraphql,甚至不太熟悉构建 GraphQL 端点。但我知道一些基本概念,我会尽力为您提供寻找解决方案的起点。

社交登录通常使用 OAuth2 协议,并且倾向于使用 JWT 作为身份验证令牌。这就是文档提到 JWT 的原因。

GraphQL 不需要知道关于操作的任何信息,除了需要什么数据、应该返回什么数据以及为该操作调用什么实际服务。我喜欢将 GraphQL 视为访问服务的通用接口。它不应该了解有关身份验证、OAuth2 等的任何信息。因此,您构建的任何 GraphQL 端点都可以调用另一个服务来处理身份验证,并返回您期望进行身份验证的数据:JWT、错误等。