2012-06-15 3 views
1

Каков наилучший подход для проверки подлинности на кучу действий Javascript на странице, не засоряя базу кода с помощью «if authenticated()»?Адресатор проверки подлинности для всех приложений Javascript?

Например: у нас есть 10 кнопок, некоторые кнопки комментариев и несколько других действий, требующих аутентификации. Когда пользователь не аутентифицирован, мы хотим перенаправить его на страницу входа/регистрации. Однако мы хотим избежать засорения кода с помощью вызовов if (user.isAuthenticated()) {xxx}. В нашем конкретном случае мы хотим использовать их главным образом для событий в позвоночнике, хотя я не думаю, что это имеет значение для общего вопроса.

+1

Я убежден, что вы должны передать запрос на сервер, и если сервер отвечает «Ответ без аутентификации», обработайте его систематически. –

+0

Существует также ['proxy.on (" all ", function (eventName) {});'] (http://documentcloud.github.com/backbone/#Events-on), который может быть тем, что вы ищете for (с переключателем 'all', чтобы поймать все события). –

ответ

1

С помощью underscorejs. Вы можете написать что-то вроде этого:

function authWrapper(func){ 
    if (user.isAuthenticated()) { 
    func.apply(this, _.rest(arguments)); 
    }else{ 
     ... 
    } 
} 

Предположим, вы используете JQuery, когда связывание событий, пишу:

$(...).bind('event', _.wrap(function(...){...}, authWrapper)); 

или

$(...).bind('event', _.wrap(thehandler, authWrapper)); 
0

Как насчет создания метода, выполняет ли проверка, используя обратный вызов для метода, который должен быть вызван, если аутентификация в порядке? Что-то наподобие:

function checkNdRun(cb,params){ 
    params = [].slice.call(params); 
    if (/*[authenticationCheckingLogic here]*/){ 
    cb.apply(null,params); 
    } else { 
    alert('please login first'); 
    } 
} 
//usage example 
somebutton.onclick = 
    function(e){checkNdRun(functionToRun,e,/*[other parameters]*/);}; 
Смежные вопросы