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;
})
}
