Hello服务堆栈用户 -
TL;即将出现的问题的DR版本是这样的:如何在使用Servicestack进行身份验证时返回自定义身份验证响应?
我已经检查过一些关于这个主题的Stack问题/答案,但我还没有能够找到最好的方法来做到这一点:
How can I extend ServiceStack Authentication 和 Return a custom auth response object from ServiceStack authentication
我想将此对象从ServiceStack返回到远程JsonServiceClient:
public class MyGreatCustomAuthResponse : AuthResponse
{
public UserModel UserModel { get; set; }
}
我的客户端目前正在使用默认的身份验证响应。我是这样做的:
var AuthResponse = client.Post(new Auth
{
provider = "credentials",
UserName = user.user_id,
Password = user.password,
RememberMe = true
});
我认为接受自定义响应的方式可能如下所示:
var AuthResponse = client.Post<MyGreatCustomResponse>(new CustomAuthRequest
{
provider = "credentials",
UserName = user.user_id,
Password = user.password,
RememberMe = true
});
//Use the UserModel object in the response for some other function on the client
var UserModel = AuthResponse.UserModel ;
这是容易实现的吗?如果是这样,怎么可能开始编码呢?
答案 0 :(得分:0)
在v3中,除了复制和自定义内置AuthService之外,您还可以使用Global或Response Filter Attribute附加自定义HTTP标头来添加其他元数据。
在下一个v4版本中,我们向Authentication and Registration Response DTOs添加了Dictionary<string, string> Meta
,以便您可以使用响应过滤器直接在Response DTO中添加元数据。
示例代码
this.GlobalResponseFilters.Add((req, res, responseDto) =>
{
if (res.Dto.GetType() == typeof(AuthenticateResponse))
{
CustomUserSession cs = (CustomUserSession)req.GetSession();
Dictionary<string, string> otherData = new Dictionary<string, string>();
otherData.Add("CustomData", cs.CustomData.ToString());
((AuthenticateResponse)res.Dto).Meta = otherData;
}
});