Graphql身份验证选项

问题描述

我至少知道两种验证用户身份的方法

  1. 检查每个请求的上下文中是否有适当的Cookies / JWT,如果找到,则进行解析并将用户属性添加到所述上下文中

即。

context: async ({ ctx }) => {
    // console.log(ctx);
    ctx.user = await COOKIEAUTH.GetAsync(ctx,AuthRefreshQuery);
    return ctx;
  },

优势:

  • 任何graphql方法都可以通过上下文访问用户属性
  • @authorize之类的指令可直接在graphql中使用。

缺点:

  • 检查每个请求中是否包含适当的Cookies / JWT,即使发现与查询无关,也可以对其进行分析并将用户添加到上下文中。

  1. 为需要身份验证的属性创建中央身份验证对象

即。

graphql

type AuthSecureMutation {
  Settings(input: SettingsArgs!): Settings!
}
type AuthSecureQuery {
  Settings: Settings!
}

解析器

const AuthSecureMutation = async (parent,args,context,info) => {
  const user = await COOKIEAUTH.GetAsync(context);
  if (!user) {
    throw new AuthorizationError();
  }
  // context.user = user; // optional?
  return user;
};
const AuthSecureQuery = AuthSecureMutation;

优势

  • 仅需要身份验证的查询才会应用逻辑来检查/解析cookie / jwt(性能+)

缺点

  • @authorize之类的指令将无效

选项2是我想出的,我打算使用它,但是我从未在任何生产示例中看到它。有人知道选项2有什么问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)