|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
Перерыл уже весь интернет, но почему-то нигде не написано то, что мне нужно. Итак. Есть кастомная схема аутентификации, созданная по вот этому мануалу. Работает просто замечательно. Все понятно, вопросов нет. Теперь я хочу сделать так, чтобы некоторые страницы могли видеть не все зарегистрированные пользователи, а только избранные. Я сделал таблички и запросы, позволяющие определять доступность страницы для пользователя. Для контроля всего процесса сделал таблицу logs со столбцами user, page, message и т. д. и функцию, которая пишет логи в эту таблицу (у меня apex на хостинге). Для определения текущего пользователя использую функцию APEX_CUSTOM_AUTH.GET_USER, для определения страницы - APEX_APPLICATION.G_FLOW_STEP_ID. И вот какой результат получается. Пока не используется page sentry function, лог выглядит так: Неизвестный пользователь зашел на страницу 101 (стандартная страница логина) Неизвестный пользователь успешно прошел аутентификацию Пользователь VASYA зашел на страницу 25 (на эту страницу меня стоит редирект после логина). И т. д. Теперь я добавляю вызов моей функции для определения, кто какую страницу может видеть. Лог выглядит так: Неизвестный пользователь зашел на страницу 101 (стандартная страница логина) Неизвестный пользователь успешно прошел аутентификацию Неизвестный пользователь зашел на страницу 1, доступ запрещен Неизвестный пользователь зашел на страницу 1, доступ запрещен Последнее сообщение идет два раза почему-то. То есть при использовании page sentry function и без ее использования функция APEX_CUSTOM_AUTH.GET_USER возвращает разный результат. Что я делаю не так? Или я вообще все не так делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2011, 16:08 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
rockclimber, А где и каким образом вы пишите логи? То есть, если раньше page sentry function вернула false, то в чем криминал? По поводу двойного вызова: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2011, 10:07 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
SvDevrockclimber, А где и каким образом вы пишите логи?У меня есть такая процедура: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Вот примеры вызовов. Процедура логина: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Второй пример: Функция проверки логина и пароля: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Третий пример: Функция проверяет. имеет ли пользователь доступ к указанному объекту. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Четвертый пример (page sentry function): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Все эти функции работают правильно - я их тестировал отдельно каждую, вызывая в разделе SQL Commands. В итоге работает все так. Пользователь заходил на страницу логина, вводит логин и пароль, вызываются функции из примеров 1 и 2, и они пишут в лог, что зашел неизвестный пользователь, ввел логин и пароль, проверка прошла успешно. Потом пользователь перенаправляется на страницу 25 (это стартовая в моем приложении), при подготовке страницы вызывается функция из третьего примера, которая проверяет, можно ли пользователю видеть один из столбцов отчета на этой странице. Так в логе появляется запись, что пользователь VASYA побывал на 25-й странице и столбец в отчете ему не доступен. SvDevТо есть, если раньше page sentry function вернула false, то в чем криминал?Если page sentry function вернула false, то криминала нет. Криминал в том, что у меня page sentry function возвращала бы true, если бы функция APEX_CUSTOM_AUTH.GET_USER возвращала бы логин пользователя. Вместо этого в логе я вижу, что page sentry function сразу после процедуры аутентификации вызывает функции APEX_CUSTOM_AUTH.GET_USER и APEX_APPLICATION.G_FLOW_STEP_ID, получая от них NULL и 1 соответственно. Поэтому получается следующее: если я использую page sentry function, то попадаю на страницу 1, получаю сообщение, что такой страницы нет (ее действительно нет), руками правлю url, чтобы попасть на 25-ю страницу, попадаю туда и вижу, что я не залогинился. Тут, кстати, если еще одна проблема: если я не использую page sentry function, то редирект на страницу 25 работает тоже не всегда, иногда меня посылает на 1-ю страницу. А если с первой перейти потом на 25-ю, я остаюсь залогиненым. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2011, 11:51 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
т.е. проблема в том, что не получается зайти на первую же страницу. Пробую в 4.1 и всё работает, заходит сразу же на страницу 2 (home page), где page requires authentication: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Впрочем поведение 4.1 от старых версий при аутентификации может отличаться, уже напарывался. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2011, 13:11 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
Один прикол вижу, если sentry_test вернула false, скажем на странице 3, выбрасывает на логин, после логина он снова пытается законнектиться к странице 3 (видимо в кукисах где-то сохранилось), снова выбрасывает на логин и т.п. А если удалить часть строки адреса с сессией, то он снова начинает нормально логиниться к стр 2. Это конечно можно вылечить, если покопаться. Для регулирования доступа к страницам всё-таки следует использовать схемы авторизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2011, 22:09 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
SvDevДля регулирования доступа к страницам всё-таки следует использовать схемы авторизации.Да? А как, где про это можно что-нибудь толковое почитать? Я просто читал, что для этой цели как раз и созданы page sentry function. По крайней мере, я так понял. Днем написал письмо на хостинг, чтобы проапгрейдили до 4.1, жду пока... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2011, 22:26 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
rockclimber, как я понимаю sentry function предназначена для управлением состоянием аутентификации, например задать для сессии ограничения по времени или по квотам, и т.д. По Authorization Scheme там в подсказках все написано, создаешь и указываешь в свойствах страницы или компонентам. Это куда удобнее и не надо отдельные условия придумывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2011, 22:33 |
|
Как правильно использовать page sentry function
|
|||
---|---|---|---|
#18+
SvDevrockclimber, как я понимаю sentry function предназначена для управлением состоянием аутентификации, например задать для сессии ограничения по времени или по квотам, и т.д. По Authorization Scheme там в подсказках все написано, создаешь и указываешь в свойствах страницы или компонентам. Это куда удобнее и не надо отдельные условия придумывать.Да, вчера перенес свою "sentry function" в кастомную Authorization Scheme и получил ровно тот эффект, который был нужен. Просто книжку про все это читал давно и половину не понял... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2011, 08:49 |
|
|
start [/forum/topic.php?fid=50&fpage=65&tid=1876335]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 122ms |
0 / 0 |