Example #1
0
 return _.reduce(providers, function(last, provider) {
     var authenticate = _.bind(provider.authenticate, provider, credentials),
         success = _.partial(successHandler, provider),        
         failure = _.partial(errorHandler, provider);
     
     return last.catch(function(reason) {
         try {
             return Q(authenticate()).then(success, failure);
         } catch(e) {                
             return failure(e);
         }            
     });       
 }, Q.reject());
Example #2
0
/*
 * @method loginRequired
 * Проверяет залогинен ли пользователь и вызывает действие логина если требуется
 * @param {Mixed} nextAction Действие выполняемое после удачного логина. По умолчанию открывает вид `index`.
 * Функция или массив вида ['viewName', argsObject] или 'имя вида'. 
 * @param {Mixed} loginAction Действие выполняемое если пользователь не аутентифицирован. По умолчанию открывает вид  `logon`, если он существует.
 * Функция или массив вида ['viewName', argsObject] или 'имя вида'.
 * @param {Object} context Контекст в котором будут вызваны функции.
 * @return {Boolean} Истина если потребовался вход.
 */
function loginRequired(nextAction, loginAction, context) {
    if(currentUser.isAuthenticated()) return false; 
         
    nextAction = nextAction || config.nextAction;  
    loginAction = loginAction || config.loginAction;
    
    function openView(params) {            
        var args, name;
        if(_.isArray(params) && params.length) {
            name = params[0];
            args = params.length > 1 && params[1];    
        } else if(_.isString(params)) {
            name = params;
        }        
        Alloy.createController(name, args).getView().open(); 
    }        
    
    // build next action callback
    if(_.isFunction(nextAction)) {
        context && (nextAction = _.bind(nextAction, context));            
    } else {
        nextAction = _.partial(openView, nextAction);            
    }        
    
    // build login action callback
    if(_.isFunction(loginAction)) {
        loginAction = _.bind(loginAction, context || null, nextAction);
    } else {
        if(_.isString(loginAction)) {
            loginAction = [loginAction, {next: nextAction}];
        } else if(_.isArray(loginAction)) {
            loginAction[1] = _.extend({next: nextAction}, loginAction[1]);
        } 
        loginAction = _.partial(openView, loginAction);
    }    
    
    Ti.API.info(MODULE_NAME,'Redirect to login action');
    loginAction();
    
    return true;   
};