Возврат пользовательского кода ответа HTTP при сбое проверки подлинности для поставщика проверки подлинности пользовательских учетных данных - PullRequest
2 голосов
/ 21 октября 2019

Я знаю, что могу вернуть пользовательский ответ при использовании пользовательского провайдера аутентификации, как показано ниже:

Возврат пользовательского объекта ответа аутентификации из аутентификации ServiceStack

Мне просто интересно, есть ли способ вернуть пользовательский код ответа HTTP.

Например, при сбое аутентификации вместо несанкционированной ошибки 401 я хочу отправить другой код ответа HTTP, чтобы получить более подробную информацию о том, что не удалось. Например, когда учетная запись заблокирована, я отправлю код ошибки XYZ!

public class MyCredentialsAuthProvider : CredentialsAuthProvider
{
    public override object Authenticate(ServiceStack.ServiceInterface.IServiceBase authService, IAuthSession session, Auth request)
    {
        //let normal authentication happen
        var authResponse = (AuthResponse)base.Authenticate(authService, session, request);

        //return your own class, but take neccessary data from AuthResponse
        return new
            {
                UserName = authResponse.UserName,
                SessionId = authResponse.SessionId,
                ReferrerUrl = authResponse.ReferrerUrl,
                SessionExpires = DateTime.Now
            };

    }
}

В попытке поймать я нашел способ вернуть пользовательский HTTP-код в эту функцию. Я возвращаюсь к примеру:

return new ServiceStack.HttpError(423, "Locked");

Я не уверен, что это правильный путь

1 Ответ

3 голосов
/ 21 октября 2019

Вы можете вернуть ответ об ошибке (например, HttpError), чтобы вернуть пользовательскую ошибку, но для успешных ответов вы должны вернуть тип AuthenticateResponse, поскольку это то, что ожидают все клиенты / потребители услуг (и другие фильтры и декораторы AuthResponse). Если вы хотите вернуть дополнительную информацию в AuthenticateResponse, вы должны вернуть ее в Meta свойстве Dictionary.

...