hotchocolate - 如何从自定义属性返回未经授权的结果?
问题描述
我正在尝试使用 HotChocolate 实现自定义授权属性。
到目前为止我所拥有的是这个
namespace GraphQL.Attributes
{
public class AuthorizeAttribute : ObjectFieldDescriptorAttribute
{
public override void OnConfigure(IDescriptorContext context, IObjectFieldDescriptor descriptor, MemberInfo member)
{
var httpContextAccessor = context.Services.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor;
var authorizationHeader = httpContextAccessor.HttpContext.Request.Headers["Authorization"].ToString();
var jwtService = context.Services.GetService(typeof(JwtService)) as JwtService;
var isValidToken = jwtService.ValidateSessionToken(authorizationHeader);
if (isValidToken == false)
{
// Here I want to return an Unauthorized message to the client and abort any further execution
}
// Everything OK
return;
}
}
}
在 ASP.NET 5 中,我可以这样做
public class AuthorizeAttribute : Attribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
var httpContextAccessor = context.Services.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor;
var authorizationHeader = httpContextAccessor.HttpContext.Request.Headers["Authorization"].ToString();
var jwtService = context.Services.GetService(typeof(JwtService)) as JwtService;
var isValidToken = jwtService.ValidateSessionToken(authorizationHeader);
if (isValidToken == false)
{
context.Result = new UnauthorizedObjectResult(new
{
Code = 1,
Message = "Invalid token"
});
return;
}
// Everything OK
return;
}
}
如您所见,在 ASP.NET 中,我们可以将UnauthorizedObjectResult
结果设置为,API 会返回该结果。
如何从 HotChocolate 中的自定义属性返回未经授权的结果?
我想我应该使用任何IDescriptorContext
,IObjectFieldDescriptor
或MemberInfo
.
有什么建议么?
解决方案
推荐阅读
- laravel-5 - 如何将多维数组转换为内爆值的索引数组?
- c# - 当时区不同时,发送 DateTime 的 WCF 服务的值会发生变化
- javascript - 表单提交成功消息显示后
- tsql - 如何在 while 循环中使用 UNION ALL
- html - CSS 使用媒体查询改变位置
- xmpp - mod_ping(ejabberd 的 XMPP ping)不起作用
- python - Python-3:为什么下面的代码在 print 语句中没有返回?
- php - Symfony 4 中文件操作的绝对路径与相对路径
- symfony - 当年与教义
- angular - 来自 Observable 订阅的 Angular 6 搜索前端实现