gpt4 book ai didi

c# - ServiceStack 5.0 AuthenticateAttribute.Execute() 现在返回一个任务

转载 作者:行者123 更新时间:2023-11-30 20:26:40 25 4
gpt4 key购买 nike

我刚从 4.0 升级到 ServiceStack 5.0。

突破性的变化是,现在我覆盖 AuthenticateAttribute.Execute() 的 Execute() 方法不起作用,因为 “AuthenticateAttribute”不包含“Execute”的定义

AuthenticateAttribute.Execute() 现在返回一个 Task(来自 System.Threading.Tasks):

    [AsyncStateMachine(typeof(<ExecuteAsync>d__12))]
public override Task ExecuteAsync(IRequest req, IResponse res, object requestDto);

而且我不确定如何重写我的 Execute() 以返回任务...它目前被编写为返回类型为 void 的方法。

我的代码:

public override void Execute(IRequest req, IResponse res, object requestDto)
{
if (HostContext.AppHost.HasValidAuthSecret(req))
{
return;
}

base.Execute(req, res, requestDto);
if (res.IsClosed)
{
return; // AuthenticateAttribute already closed the request (ie auth failed)
}

IronUserSession session = req.GetSession() as IronUserSession;

if (this.HasAnyRoles(req, session))
{
return;
}

if (this.DoHtmlRedirectIfConfigured(req, res))
{
return;
}

res.StatusCode = (int) HttpStatusCode.Forbidden;
res.StatusDescription = ErrorMessages.InvalidRole.Localize(req);
res.EndRequest();
}

是否有像我以前那样使用 ServiceStack 身份验证的变通方法?或者有没有办法重写我的代码以返回任务?我真的不确定那个任务是什么...... their documentation is massive但它在 Execute() 上的内容几乎没有。

最佳答案

您可能会修改您的方法以返回类似 await AuthProvider.HandleFailedAuth(authProviders[0], session, req, res); 的内容,这将返回您似乎想要发送的任务。

您是否看过原始方法的源代码?

public override async Task ExecuteAsync(IRequest req, IResponse res, object requestDto)
{
if (AuthenticateService.AuthProviders == null)
throw new InvalidOperationException(
"The AuthService must be initialized by calling AuthService.Init to use an authenticate attribute");

if (HostContext.HasValidAuthSecret(req))
return;

var authProviders = AuthenticateService.GetAuthProviders(this.Provider);
if (authProviders.Length == 0)
{
await res.WriteError(req, requestDto, $"No registered Auth Providers found matching {this.Provider ?? "any"} provider");
res.EndRequest();
return;
}

req.PopulateFromRequestIfHasSessionId(requestDto);

PreAuthenticate(req, authProviders);

if (res.IsClosed)
return;

var session = req.GetSession();
if (session == null || !authProviders.Any(x => session.IsAuthorized(x.Provider)))
{
if (this.DoHtmlRedirectIfConfigured(req, res, true))
return;

await AuthProvider.HandleFailedAuth(authProviders[0], session, req, res);
}
}

引用。 AuthenticateAttribute.cs - https://github.com/ServiceStack/ServiceStack/blob/d1ba794cea08d12adedf198cd10fe7cfe0a9f60e/src/ServiceStack/AuthenticateAttribute.cs

关于c# - ServiceStack 5.0 AuthenticateAttribute.Execute() 现在返回一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49521022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com