在自定义CredentialsAuthProvider中,在成功进行身份验证后,我想在Meta属性中发送其他数据

时间:2017-10-27 01:59:57

标签: c# .net authentication servicestack

在自定义CredentialsAuthProvider中,在成功进行身份验证后,我想在Meta属性中发送其他数据。我在哪里可以获得当前响应并向meta添加信息?我想在OnAuthenticated方法中执行此操作,因为我为经过身份验证的用户提供了更多逻辑,然后发送元数据。这不是会话数据,对于登录用户来说只有一次。

这是一个Existing Question,但它大约有4年的历史,并且不确定它是否会对评论中提到的已经过身份验证的用户产生任何影响。此SO也建议覆盖Authenticate方法,该方法不适用于我,因为我只想对OnAuthenticated事件中经过身份验证的用户执行此操作。

1 个答案:

答案 0 :(得分:2)

您可以通过让AuthProvider实施IAuthResponseFilter来修改AuthenticateResponse,在成功的身份验证中使用AuthFilterContext调用该版本,可以使用以下命令修改响应:

public void Execute(AuthFilterContext authContext)
{
    authContext.AuthResponse.Meta = new Dictionary<string,string> { ... };
}

另一个选项是覆盖AuthProvider中的Authenticate,例如:

public override object Authenticate(
    IServiceBase authService, IAuthSession session, Authenticate request)
{
    var response = base.Authenticate(authService, session, request);
    if (response is AuthenticateResponse authDto)
    {
        authDto.Meta = new Dictionary<string,string> { ... }
    }
    return response;
}

或者,因为它只是一个普通的服务,你也可以注册一个Global Response Filter来修改Response DTO,例如:

GlobalResponseFilters.Add((req, res, responseDto) => 
{
    if (responseDto is AuthenticateResponse authDto)
    {
        authDto.Meta = new Dictionary<string,string> { ... }
    }
});