2013-02-12 2 views
4

Я создаю приложение ASP.NET MVC 4, используя стек стека MVC-пакета службы, используя службы auth и сеанса стека служб. Я копирую много логики из проекта API социальной загрузки. Мои контроллеры наследуют от следующего базового контроллера:ServiceStack Session всегда null в MVC-контроллере

public class ControllerBase : ServiceStackController<CustomUserSession> 

, который реализуется как:

public class ControllerBase : ServiceStackController<CustomUserSession> {} 

CustomUserSession наследует от AuthUserSession:

public class CustomUserSession : AuthUserSession 

После того как я войти, мои CustomUserSessionOnAuthenticated() пробегов метод , но когда я перенаправляюсь обратно к контроллеру, UserSession не является популяром например,

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo) 
{ 
    base.OnAuthenticated(authService, session, tokens, authInfo); 
    CustomFoo = "SOMETHING CUSTOM"; 

    // More stuff 
} 

public class MyController : ControllerBase 
{ 
    public ActionResult Index() 
    { 
     // After having authenticated 
     var isAuth = base.UserSession.IsAuthenticated; // This is always false 
     var myCustomFoo = base.UserSession.CustomFoo; // This is always null 

    } 
} 

Может ли кто-нибудь увидеть, что мне здесь не хватает?

ответ

2

См выпустить в ServiceStack Google Group - https://groups.google.com/forum/?fromgroups=#!topic/servicestack/5JGjCudURFU

При проверке подлинности с JsonSeviceClient (или любой serviceClient) внутри MVC в cookie не передается с запросом/ответом MVC.

При аутентификации в контроллере MVC на ServiceStack, MVC HttpContext должен быть отправлен в ServiceStack. Что-то вроде ниже должно работать ...

var authService = AppHostBase.Resolve<AuthService>(); 
authService.RequestContext = System.Web.HttpContext.Current.ToRequestContext(); 
var response = authService.Authenticate(new Auth 
{ 
    UserName = model.UserName, 
    Password = model.Password, 
    RememberMe = model.RememberMe 
}); 
1

Попробуйте установить IsAuthenticated истина и сохранение сеанса ...

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo) 
{ 
    base.OnAuthenticated(authService, session, tokens, authInfo); 
    CustomFoo = "SOMETHING CUSTOM"; 
    session.IsAuthenticated = true; 
    authService.SaveSession(session); 

    // More stuff 
} 
+0

спасибо за предложение, но не повезло. в этот момент сеанс заполняется, я просто не могу его прочитать, используя свойство UserSession ServiceStackController. Однако я обнаружил, что я вижу заполненный пользовательский сеанс, если я использую свойство ICacheClient Cache. возможно, проблема с расширением метода SessionAs? собираюсь вытащить источник, чтобы посмотреть, что там происходит – pjacko

Смежные вопросы