Passport(oAuth2)如何与GraphQL(TypeGraphQL)一起使用?

时间:2019-09-06 13:33:17

标签: node.js passport.js next.js graphql-js

我正在尝试使用Google策略。

我的目标是通过仅通过Google登录进行身份验证来使用户访问React Next.js应用程序的受限区域。这基于其电子邮件的扩展名@ SpecificDomain.com。

我在前端有一个组件,可打开Goog​​le登录窗口并返回带有访问令牌的对象。据我了解,然后将这个对象转发到我自己的后端(Apollo服务器,TypeGraphQL配置)。

我的ApolloServer实例如下:

onst apolloServer = new ApolloServer({ schema,
context: async ({ req}) => {
    let token = null;
    let currentUser = null;

    try{
      token = req.headers.authorization;

      if(token){
        currentUser = await authenticate(token);
      }
    } catch (error) {
      console.warn(`Unable to authenticate using auth token: ${token}`);
    }

    return {
      currentUser,
      token
    }



} }) as any;

从上下文内部,我试图通过将令牌发送到另一个组件来验证用户访问令牌,在该组件中,我尝试使用Passport,该组件使用Google oauth2策略来验证用户。

但是,我在网上看到的所有示例都使用Express中间件。我想知道是否只有GraphQL可以做到这一点?

我不明白我该怎么称呼:

    passport.use(new GoogleStrategy({
  clientID: googleCredentials.CLIENT_ID,
  clientSecret: googleCredentials.CLIENT_SECRET,
  callbackURL: googleCredentials.redirect_uris[0]
},
function(accessToken : string, cb : any, refreshToken? : string, profile? : string) {
  const userOject = {accessToken, refreshToken, profile};
  return cb(null, userOject);
}
));

如何向其中传递令牌?

我也尝试过

   export default function authenticateUser(token : string) {
  passport.authenticate('oauth2');

}

但是passport.authenticate没有任何令牌参数。

有人可以给我一些指导或指出正确的方法吗?

谢谢您的时间。

1 个答案:

答案 0 :(得分:0)

已使用Express处理身份验证。