1

我是 ServiceStack 的新手,想知道如何在身份验证期间在表中捕获登录(成功和失败的尝试)信息,并想问一下你们之前是否做过此类工作。我还阅读了一个名为 RequestLogger 的功能(请参阅ServiceStack 请求记录器,目前不确定该走哪条路。我还阅读了有关使用过滤器拦截呼叫的信息。任何指针将不胜感激

4

1 回答 1

2

您需要查看Session 或 Auth Events以针对不同的 Session/Auth 事件执行自定义逻辑。

但是没有针对失败尝试的自定义事件,这些事件根据使用的身份验证提供程序而有所不同,例如,OAuth 提供程序重定向用户,将#f=ErrorType后缀添加到 url 以指示失败的原因。您可以通过将自定义过滤器分配给FailedRedirectUrlFilter例如:

Plugins.Add(AuthFeature(() => new AuthUserSession(),
    new IAuthProvider[]
        new FacebookAuthProvider(AppSettings) { 
            FailedRedirectUrlFilter = (authProvider, url) => {
                var log = LogManager.GetLogger(authProvider.GetType());
                log.Info("Failed OAuth login attempt, redirecting to: ", url);
                return url; 
            }
        }
    });

它使用注册的Logging provider记录一条消息。

虽然失败的 Credentials Auth 登录将引发UnAuthorizedHTTP 错误,但您可以使用自定义Global Response Filter处理该错误,例如:

this.GlobalResponseFilters.Add((req, res, response) => {
    var error = response as HttpError;
    if (error != null && req.Dto.GetType() == typeof(Authenticate))
    {
        //...
    }
});
于 2015-11-27T01:24:03.647 回答