Я хочу добавить дополнительные свойства в ответ, когда пользователь входит в систему.
При вызове https://Servicestackservice/auth/credentials?userName=**** & password = **** Я получаю ответ ниже , Я хочу добавить 2 дополнительных значения. DateFormat & TimeZone
{"userId": "21", "sessionId": "****", "userName": "SystemAdmin", "displayName": "System Admin", "referrerUrl": null, "bearerToken": "****", "refreshToken": * "," profileUrl ": *", "role": [View], "permissions": [View], " responseStatus ": {" errorCode ": null," message ": null," stackTrace ": null," errors ": null," meta ": null}," meta ": null}
Я нашел пример на форумах SS. Мне пришлось изменить его, чтобы он запустился.
Из документов SS
Modifying the Payload
Хотя в полезную нагрузку по умолчанию встроена только ограниченная информация, все соответствующие свойства AuthUserSession, встроенные в токен, также будут быть заполненным в сеансе , который можно добавить к полезной нагрузке с помощью делегата CreatePayloadFilter. Поэтому, если вы также хотите иметь доступ к моменту регистрации пользователя, вы можете добавить его в полезную нагрузку с помощью:
Я надеюсь, что именно так я получу их в " совпадающем AuthUserSession "
this.GlobalRequestFilters.Add(async (req, res, requestDto) =>
{
AuthFilter.AuthResponse(req, res, requestDto);
});
public static void AuthResponse(IRequest req, IResponse res, object response)
{
var authRes = response as Authenticate;
if (authRes == null || authRes.UserName == null)
{
return;
}
var session = (CustomUserSession)req.GetSession();
if (session != null && session.UserAuthId != null)
{
//General Format for US
string dformat = "g";
using (var db = HostContext.TryResolve<IDbConnectionFactory>().Open())
{
var userAuthExt = db.Single<UserAuthExtension>(ext => ext.UserAuthId == int.Parse(session.UserAuthId));
if (userAuthExt != null)
{
dformat = userAuthExt.DateTimeFormat;
}
}
authRes.Meta = new Dictionary<string, string> {{"TimeZone", session.TimeZone}, {"DateFormat", dformat}};
}
}
Добавление этого, чтобы попытаться получить токены JWT для хранения новых данных. Изучив полезную нагрузку, я вижу, что в список добавлено 2 новых значения.
new JwtAuthProvider(AppSettings)
{
CreatePayloadFilter = (payload, session) =>
{
if (session != null && session.UserAuthId != null)
{
//General Format for US
string dformat = "g";
using (var db = HostContext.TryResolve<IDbConnectionFactory>().Open())
{
var userAuthExt = db.Single<UserAuthExtension>(ext => ext.UserAuthId == int.Parse(session.UserAuthId));
if (userAuthExt != null)
{
dformat = userAuthExt.DateTimeFormat;
}
}
payload["TimeZone"] = ((AuthUserSession) session).TimeZone;
payload["DateFormat"] = dformat;
}
},