Использование собственного фильтра BeforeAction в .net2.0 Монорельс Setop не всегда стреляет - PullRequest
0 голосов
/ 11 октября 2011

Я создал собственный фильтр, который должен срабатывать при каждом действии (запросе). Итак, проблема в том, что вы запускаете действие в первый раз, когда пользователь обновляет его, оно никогда не запускается снова. Это как кеширование или что-то в этом роде. Я запускаю фильтр в первый раз, чтобы код работал (-ish), но меня убивает второстепенная загрузка страницы. вот в основном код.

        using MonoRailHelper;
        namespace evergreen.Controllers
        {

            public class loggedinFilterAttribute : FilterAttribute
            {
                public loggedinFilterAttribute() : base ( ExecuteEnum.BeforeAction, typeof(AuthenticationFilter))
                {

                    String username = Authentication.authenticate();
                    // save user in database
                    authUser[] authUser_list = ActiveRecordBase<authUser>.FindAll();
                    authUser temp = null;
                    foreach (authUser authUser in authUser_list)
                    {
                        if (!string.IsNullOrEmpty(authUser.Nid) && authUser.Nid.ToUpper() == username.ToUpper())
                        { temp = authUser; }
                    }
                    temp.Logedin = true;
                    temp.LastActive = DateTime.Now;
                    temp.Save();

                }
            }


            [loggedinFilter] 
            [Layout("default"), Rescue("generalerror")]
            public abstract class BaseController : MonoRailHelper.HelperBaseController

            {
                function a bunch
            }
            }
        }

loggedinFilter - это то, что нужно запустить, и temp.LastActive = DateTime.Now; действительно перемещается вверх по БД, когда вы переходите на «новые» страницы здесь, но это когда вы возвращаетесь… никаких изменений не происходит.

У кого-нибудь есть идеи, как это исправить?

Спасибо за помощь .. Ура-Джереми

1 Ответ

0 голосов
/ 11 октября 2011

Не следует выполнять аутентификацию в конструкторе атрибутов фильтра.

Вместо этого следуйте инструкциям для создания фильтра : внедрите IFilter (ваша логика аутентификации здесь), затем примените фильтр к контроллеру с помощью FilterAttribute. Вы можете затем (если хотите) обернуть FilterAttribute в свою собственную реализацию атрибута.

Подробнее о фильтрах .

Вот фильтр монорельсовой аутентификации, который использует ActiveRecord , вы можете использовать его для справки.

...