網站搜尋

typescript - 如何在 apollo-server-express 中選擇性允許查詢?


我的伺服器處理的大多數查詢和變更都需要授權。然而,有少數解析器應該是公開的,例如登入、註冊、忘記密碼。我該如何有選擇性地允許這些解析器被訪問,並且預設對其他解析器設置授權門檻?

目前使用 apollo-server-express 和 type-graphql。

答案#1

你好,你可以在 schema 定義上使用 @Authorized() 裝飾器搭配 authChecker 函數,

這裡是範例程式碼

import { Request } from "express";
import { ApolloServer, } from "apollo-server-express";
          
export interface ExpressContext {
  req: Request;
}

export const userAuthChecker: AuthChecker<ExpressContext> = async (
  { root, args, context: { req }, info },
  roles,
) => {
  //Perform your own logic here 
  return false; // true if the user is authorized   
};

  // Add your Auth checker middleware to your buildSchema method
const schema = await buildSchema(
  {
    authChecker: userAuthChecker,
    resolvers: [...yourresolvers]
  }
);

// then define your context from the apollo server setup
const apolloserver = new ApolloServer({
  schema, context: (ctx) => {
    return ctx;
  }
});

// After Completing the above this is how you put it in action, with @Authorized() // decorator
@ObjectType()
export class Resolver extends BaseEntity {
  ...
  @Authorized('Admin') // <---
  @Query(returns => [MyModel])
  artists() {
    return value;
  })
}