问题描述
这次我想为后端使用不同的技术。所以我为我的 graphql API 使用了 prisma
、apollo-server
和 typegraphql
。 you can find more info here
安装这些软件包后,我想使用 Google 进行社交登录。经过一些研究,我发现 passport js
和 passport-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-server
或 typegraphql
,甚至不太熟悉构建 GraphQL 端点。但我知道一些基本概念,我会尽力为您提供寻找解决方案的起点。
社交登录通常使用 OAuth2 协议,并且倾向于使用 JWT 作为身份验证令牌。这就是文档提到 JWT 的原因。
GraphQL 不需要知道关于操作的任何信息,除了需要什么数据、应该返回什么数据以及为该操作调用什么实际服务。我喜欢将 GraphQL 视为访问服务的通用接口。它不应该了解有关身份验证、OAuth2 等的任何信息。因此,您构建的任何 GraphQL 端点都可以调用另一个服务来处理身份验证,并返回您期望进行身份验证的数据:JWT、错误等。