노출 시키거나 HTTP 헤더로 반환하는 서비스를 만들어야합니까?
세션에 추가하는 사용자 지정 매개 변수는 기본적으로 ServiceStack에 노출되지 않습니다.
로그인 결과에서 노출 :
당신은 성공적인 응답의 일환으로 로그인로부터의 응답이 정보를 반환 할 수 있습니다. 순간
ServiceStack의 CredentialsAuthProvider
에서 기본 응답은 다음과 같습니다
return new AuthResponse {
UserName = userName,
SessionId = session.Id,
ReferrerUrl = referrerUrl
};
당신은 Authenticate
방법을 재정 의하여 사용자 지정 인증 공급자에서이 사용자 정의 할 수 있습니다.
이 메서드의 대부분의 코드는 original CredentialsAuthProvider
authenticate method (here)에서 복사 된 다음 사용자 지정 세션 유형 (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,
...
};
}
}
서비스로 노출의 유일한 장점은, 나중에 전화를하고 다시 인증 할 필요없이 데이터 (이 변경된 경우)의 신선한 값을 얻을 수있을 것입니다.
희망이 있습니다.
안녕하세요 @ 스캇 내가'Authenticate' 메서드에서'sessionUser' 개체에 액세스 할 때 값이 설정되지 않은 빈 개체입니까? – CallumVass
@BiffBaffBoff'OnAuthenticated' 호출 다음에'var sessionUser = session as AppUserSession; '을 이동 시켰습니까? 몇 분 전에 코드를 변경 했나요? – Scott
그래, 나는 그것을 옮겼지만 여전히 비어 있었고 새로운 질문을 시작하길 원했던가? – CallumVass