それらを公開するサービスを作成する必要がありますか、それとも HTTP ヘッダーで返されますか?
セッションに追加するカスタム パラメーターは、既定では、ServiceStack によって公開されることはありません。
ログイン結果から公開:
正常な応答の一部として、ログインからの応答でこの情報を返すことができます。
現時点で、ServiceStack からのデフォルトの応答CredentialsAuthProvider
は次のとおりです。
return new AuthResponse {
UserName = userName,
SessionId = session.Id,
ReferrerUrl = referrerUrl
};
メソッドをオーバーライドすることで、カスタム認証プロバイダーでこれをカスタマイズできますAuthenticate
。
このメソッドのほとんどのコードは、元のCredentialsAuthProvider
認証メソッド (こちら)からコピーされ、カスタム セッション タイプ ( AppUserSession
) を使用してカスタム レスポンスを生成するように調整されています。
public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
{
var userName = request.UserName;
var password = request.Password;
if (!LoginMatchesSession(session, userName))
{
authService.RemoveSession();
session = authService.GetSession();
}
if (TryAuthenticate(authService, userName, password))
{
session.IsAuthenticated = true;
if (session.UserAuthName == null)
{
session.UserAuthName = userName;
}
OnAuthenticated(authService, session, null, null);
var sessionUser = authService.GetSession() as AppUserSession;
// Return your Authentication Response DTO here
return new {
UserName = userName,
SessionId = session.Id,
DisplayName = sessionUser.DisplayName,
CustomerCount = sessionUser.CustomerCount,
...
};
}
throw HttpError.Unauthorized("Invalid UserName or Password");
}
サービスを使用して公開します。
この追加情報を返すカスタム サービスを作成することでそれらを公開できますが、ログインに成功した後に別の要求が必要になり、ユーザーの遅延とデータ オーバーヘッドが増加します。
[Route("/SessionInfo", "GET")]
public class GetSessionInfoRequest : IReturn<SessionInfo>
public class SessionInfo
{
public string Username { get; set; }
public string DisplayName { get; set; }
public int CustomerCount { get; set; }
...
}
[Authenticate]
public class SessionInfoService : Service
{
public SessionInfo Get(GetSessionInfoRequest request)
{
var sessionUser = SessionAs<AppUserSession>();
return new SessionInfo {
UserName = sessionUser.UserName,
DisplayName = sessionUser.DisplayName,
CustomerCount = sessionUser.CustomerCount,
...
};
}
}
サービスとして公開することの唯一の本当の利点は、後でそれを呼び出して、再認証することなくデータのより新しい値を取得できることです (変更されている場合)。
それが役立つことを願っています。