Chcę przed odpaleniem czegokolwiek w moim bazowym kontrolerze sprawdzić czy w ciasteczku nie ma zapisanej sesji i ewentualnie doczytać i wstawić do sesji ID użytkownika (na wypadek wygaśnięcia sesji itp.) aby już w docelowym kontrolerze zawsze mieć ID usera, a jeśli go nie ma to kontroler nie powinien zostać wywołany.
Czyli coś na zasadzie CyckiController : MojBaseController
Więc tą sesję / id usera chciałbym sprawdzać i uzupełniać w MojBaseController, a jeśli nie ma ciasteczka i id usera w sesji to przekierować na jakąś stronę w rodzaju NieMaCycowUnder18.
Jak to zrobić? Jaką metodę w MojBaseController nadpisać?
@krukers: Niestety nie siedzę już od jakiegoś czasu w stacku .NET-owym, ale myślę że zrobisz to za pomocą ActionFiltra (albo Global.asax) + ModelBinder.
ActionFilter sprawdzi czy jest wjazd i zrobi rewrite jeśli trzeba. ModelBinder wyciągnie z headera id usera i wstrzyknie do parametru. Tak bym to widział.
@mathix: dzięki, też właśnie ekszyn filtry mi się rzuciły w oczy, chyba tak to zrobie. ModelBinder chyba nie będzie potrzebny bo mam statyczną klasę czytającą z sesji usera itp. Dzięki za materiały, poczytam :)
@krukers: No statyczna rozwiąże problem, ale ja ich nie kocham :) Później się źle testuje, jeśli testujesz kontrolery (chociaż IMO to czasem przerost formy nad treścią).
@krukers: Wystarczy, że nadpiszesz metodę kontrolera. Klasa Controller ma kilka które wykonują się przed każdą akcją, ciebie może zainteresować "OnActionExecuting". Robisz zwykły override i piszesz swój kod.
Możesz się bawić w filtry, ale jeżeli to jest coś co się tyczy wszystkich akcji we wszystkich kontrolerach dziedziczących po twoim bazowym, to lepiej wbić to w kontroler przy pomocy powyższej metody.
Z innej beczki możesz to też rozwiązać ładniej i zrobić sobie
Na tym API będzie oparta strona/aplikacja internetowa.
Do tego chce także napisać na Androida aplikację, która równierz będzie oparta o to API.
Tak teraz się zastanawiam jak rozwiązać tutaj autentykacje użytkowników? Pod Androidem nie będę miał już ciasteczek, a chciałbym korzystać z mechanizmów API, podobnie jak aplikacja webowa.
@krukers: No, to dość popularny i nowoczesny kierunek, tzn API z którego korzstają zarówno mobilki jak i aplikacja www, a do tego w ramach front-endu na www można walnąć coś oparte o jakiś framework mvc javascriptowy, np. angular.js. Działać takie coś będzie świetnie i ładnie się skalować. Architetktura pierwsza klasa.
Co do autentykacji, to nie wiem czy nie lepszym sposobem by tu były jakieś tokeny, tzn masz metodę w api do
@krukers: Jak apkę webową robisz SPA to generalnie prosto. Nie ślij tokena w cookie tylko w headerze (ta wiem, że cookie leci w headerze, chodzi mi o oddzielny header typu AuthToken: ). Wtedy zabezpieczysz tylko calle do Web API, a dostęp do samej strony (template'y, css-y, js) zostawisz otwarty.
Tak jak napisał @teddybear69 - będziesz musiał gdzieś przechowywać informację o sesji. Jeśli nie będziesz skalował horyzontalnie to problemu nie ma -
No mirki kochane muszę coś wyznać, właśnie się dowiedziałem że moja wybranka serca po 6 latach bycia razem mnie zdradziła. I #!$%@?, kredyt, mieszkanie, 6 lat razem wszytko w #!$%@?. Co robić? Jak żyć?
Chcę przed odpaleniem czegokolwiek w moim bazowym kontrolerze sprawdzić czy w ciasteczku nie ma zapisanej sesji i ewentualnie doczytać i wstawić do sesji ID użytkownika (na wypadek wygaśnięcia sesji itp.) aby już w docelowym kontrolerze zawsze mieć ID usera, a jeśli go nie ma to kontroler nie powinien zostać wywołany.
Czyli coś na zasadzie CyckiController : MojBaseController
Więc tą sesję / id usera chciałbym sprawdzać i uzupełniać w MojBaseController, a jeśli nie ma ciasteczka i id usera w sesji to przekierować na jakąś stronę w rodzaju NieMaCycowUnder18.
Jak to zrobić? Jaką metodę w MojBaseController nadpisać?
http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs
http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
ActionFilter sprawdzi czy jest wjazd i zrobi rewrite jeśli trzeba. ModelBinder wyciągnie z headera id usera i wstrzyknie do parametru. Tak bym to widział.
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting(v=vs.118).aspx
Możesz się bawić w filtry, ale jeżeli to jest coś co się tyczy wszystkich akcji we wszystkich kontrolerach dziedziczących po twoim bazowym, to lepiej wbić to w kontroler przy pomocy powyższej metody.
Z innej beczki możesz to też rozwiązać ładniej i zrobić sobie
Generalnie to będzie serwis JSON w Web API (2).
Na tym API będzie oparta strona/aplikacja internetowa.
Do tego chce także napisać na Androida aplikację, która równierz będzie oparta o to API.
Tak teraz się zastanawiam jak rozwiązać tutaj autentykacje użytkowników? Pod Androidem nie będę miał już ciasteczek, a chciałbym korzystać z mechanizmów API, podobnie jak aplikacja webowa.
Czy to w ogóle dobry pomysł opierać
Co do autentykacji, to nie wiem czy nie lepszym sposobem by tu były jakieś tokeny, tzn masz metodę w api do
Tak jak napisał @teddybear69 - będziesz musiał gdzieś przechowywać informację o sesji. Jeśli nie będziesz skalował horyzontalnie to problemu nie ma -
http://www.wykop.pl/wpis/8829004/programowanie-pytanie-mvc-android-dotnet-csharp-as/