У меня есть приложение для явного приложения службы, в котором я использую Facebook-клятву и Redis - Facebook и redis стороны вещей, похоже, работают, т.е. когда я нахожусьAuthUserSession имеет значение null внутри службы ServiceStack после успешного auth
abc.com/auth/facebook
Пользовательский сеанс пользователя заносится в метод OnAuthenticated. Кэш Redis имеет правильные данные. Так хорошо
Проблема Im имеет понимание того, как получить этот CustomUserSession в последующем запросе. Для начала страницы переадресации OAuth «/ О нас», где я хочу, чтобы получить значение сеанса, однако это всегда нуль
[DataContract]
public class CustomUserSession : AuthUserSession
{
[DataMember]
public string CustomId { get; set; }
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, Dictionary<string, string> authInfo)
{
// receiving session id here and can retrieve from redis cache
}
public override bool IsAuthorized(string provider)
{
// when using the [Authenticate] attribute - this Id is always
// a fresh value and so doesn't exist in cache and cannot be auth'd
string sessionKey = SessionFeature.GetSessionKey(this.Id);
cacheClient = ServiceStackHost.Instance.TryResolve<ICacheClient>();
CustomUserSession session = cacheClient.Get<CustomUserSession>(sessionKey);
if (session == null)
{
return false;
}
return session.IsAuthenticated;
}
}
[DefaultView("AboutUs")]
public class AboutUsService : AppServiceBase
{
public object Get(AboutUsRequest request)
{
var sess = base.UserSession;
return new AboutUsResponse
{
//custom Id is always null??
Name = sess.CustomId
};
}
}
public abstract class AppServiceBase : Service
{
protected CustomUserSession UserSession
{
get
{
return base.SessionAs<CustomUserSession>();
}
}
}
Как зарегистрировать сеанс кэш & т.д.
AppConfig = new AppConfig(appSettings);
container.Register(AppConfig);
container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("10.1.1.10:6379"));
container.Register(c =>
c.Resolve<IRedisClientsManager>().GetCacheClient());
ConfigureAuth(container, appSettings);
содержание ConfigureAuth()
var authFeature = new AuthFeature(
() => new CustomUserSession(),
new IAuthProvider[]
{
new FacebookAuthProvider(appSettings), // override of BasicAuthProvider
}
) {HtmlRedirect = null, IncludeAssignRoleServices = false};
Plugins.Add(authFeature);
Я чувствую, что я что-то очевидное здесь отсутствует .... заранее спасибо
@MikeW Является ли это просто 'CustomId' это нуль? Если да, то где вы его заполняете, а сеанс сохраняется после? – mythz
объект session является новым(), все значения для сеанса есть, когда OnAuthenticate вызывается как CustomId и Facebook Email и т. Д. В Redis Monitor я могу видеть, что данные сеанса являются SET с ключом. Затем перенаправление на страницу бритвы, где я пытаюсь получить значения - я могу связать вам код проекта, если он помогает – MikeW
@MikeW использует ли 'SET' в Redis Monitor' CustomId'? Вы также можете увидеть запрос «GET» redis для доступа к пользовательскому сеансу, использует ли он тот же ключ сеанса? – mythz