1

我目前正在尝试实现 ServiceStack 的身份验证插件,但在用户登录后我无法注销用户。我从这个线程中看到:

如何在 ServiceStack 中注销经过身份验证的用户?

你应该能够提出请求auth/logout。但是,此时我仍处于登录状态。我也尝试以无效用户身份登录,/auth?username=&password=但无济于事。

奇怪的是,这些方法在极少数情况下对我有用,但我还没有找到原因。任何帮助,将不胜感激。

更新:

我刚刚在 Fiddler 中尝试了上述请求,并注意到我返回了 401。我想在尝试以无效用户身份登录时应该可以预料到,但为什么注销请求会出现这种情况?

4

1 回答 1

2

看起来这与注销时触发用户名/密码验证的情况相同。CustomAuthProvider如果您还没有这样做,您可以通过推出自己的产品来克服这个问题。在验证部分,您应该排除注销作为提供者。

public class CustomAuthProvider : CredentialsAuthProvider
{
    private class CredentialsAuthValidator : AbstractValidator<Authenticate>
    {
        public CredentialsAuthValidator()
        {
            RuleFor(x => x.UserName)
                    .NotEmpty().WithMessage("Username Required")
                    .When(d => d.provider != "logout");

            RuleFor(x => x.Password)
                    .NotEmpty().WithMessage("Password Required")
                    .When(d => d.provider != "logout");
        }
    }

    public override object Authenticate(IServiceBase authService, IAuthSession session, Authenticate request)
    {
        new CredentialsAuthValidator().ValidateAndThrow(request);
        return Authenticate(authService, session, request.UserName, request.Password, request.Continue);
    }
}

您还需要注册 CustomAuthProvider

Plugins.Add(new AuthFeature(() => new CustomUserSession(),
    new IAuthProvider[] {
       new CustomAuthProvider()
    }) { HtmlRedirect = null });

注意:您在/auth/{provider}?username=&password=

于 2015-04-02T15:45:14.770 回答