cookies - 如何为 graphql 订阅实现身份验证防护(passportjs + cookies)

标签 cookies graphql passport.js nestjs graphql-subscriptions

如何将用户传递给请求? 有没有可能的方法来实现像 SubscriptionAuthGuard 这样的东西?

没有订阅,一切正常

代码:

GraphQLModule.forRoot({
      installSubscriptionHandlers: true,
      subscriptions: {
        'subscriptions-transport-ws': {
          onConnect: (connectionParams, webSocket) =>
            new Promise((resolve) => {
              passportInit(webSocket.upgradeReq, {} as any, () => {
                resolve(webSocket.upgradeReq);
              });
            }),
        },
      },
      context: ({ req }) => ({ req }),
    }),

错误:

TypeError: Cannot set property 'authInfo' of undefined

最佳答案

这对我有用,我正在使用 JWT 和不记名 token 。

GraphQL.模块:

    'subscriptions-transport-ws': {
      path: '/graphql',
      onConnect: (connectionParams) => {
        return {
          req: {
            headers: { authorization:
                connectionParams.Authorization ??
                connectionParams.authorization,
            },
          },
        };
      },
    },

守卫:


@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
  async canActivate(context: ExecutionContext): Promise<boolean> {
    try {
      return (await super.canActivate(context)) as boolean;
    } catch (e) {
      throw new AuthenticationError(generalErrorMessages.invalidToken);
    }
  }

  getRequest(context: ExecutionContext): Request {
    const ctx = GqlExecutionContext.create(context);

    return ctx.getContext().req;
  }
}

关于cookies - 如何为 graphql 订阅实现身份验证防护(passportjs + cookies),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70476608/

相关文章:

python - 重定向后 Cookie 丢失(Bottle + uWSGI + Python)

perl - 为什么 Safari 不从我的 Perl CGI 脚本设置 cookie?

npm - 可以使用 pnpm 仅使用一个软件包版本吗?

GraphQL:突变运行时订阅不会触发

node.js - Passport 验证失败时不会重定向

url - 什么是标准的 Google Analytics UTM 归因方法?

java - 在 java-spring-tomcat 上设置 session cookie 属性 "Domain"

GraphQL错误: Unknown argument 'deleted' on field 'removeFromPostsOnComments'

node.js - 让 Passport.js 对用户进行身份验证时出现问题

javascript - 在生产中直接表达到错误的端点,但在开发中完美工作