2015-06-22 3 views
0

Всякий раз, когда я впервые загружаю приложение AngularJS, я получаю пустой экран и эту попытку проверить, прошел ли аутентификация пользователя в бесконечном цикле.«Get Authenticated» forvert при первом запуске

Для этого проекта я использую sails версии 0.11.0, новейшую версию AngularJS для персональных материалов, а также Bower and Yeoman (в частности, generator-cg-angular). Я также использую спутник, который, как предполагается, очень помогает в этом процессе.

Я просто настраиваю свои первые функции регистрации и регистрации, поэтому я, возможно, допустил некоторые простые ошибки.

ОБНОВЛЕНИЕ: Из некоторых полезных людей в чат-комнате Sails Gitter я думаю, что «ответ не отправляется куда-то» - то, что мне сказали, было вероятной причиной ошибки, от довольно опытного разработчик. Так что это может быть моя проблема ... пока не знаю, просто чтобы этот вопрос обновился.

Некоторые из моих соответствующего кода выглядит следующим образом:

Это первое состояние мое приложение пытается отправить пользователю (в app.js файле):

$stateProvider.state('dashboard', { 
    url: '/', 
    templateUrl: 'partial/scaffold/scaffold.html', 
    controller: 'ScaffoldCtrl as scaffold', 
    data: { loginRequired: true } // will also apply to all children of 'dashboard' 
}); 

Это содержимое моя служба dashboard.auth, которую я знаю, имеет решающее значение для получения разрешения на работу.

var currentUser, 
    isAuthenticated = false, 
    baseAuth = Restangular.all('user'); 

return { 

    login: function (credentials) { 
     return baseAuth.customPOST(credentials, 'login').then(function (user) { 
      $log.debug('User logged in: ', user); 
      isAuthenticated = true; 
      return user; 
     }); 
    }, 

    logout: function() { 
     return baseAuth.customPOST({}, 'logout').then(function() { 
      currentUser = undefined; 
      isAuthenticated = false; 
     }); 
    }, 

    register: function (newUser) { 
     return baseAuth.customPOST(newUser, 'register').then(function (user) { 
      isAuthenticated = true; 
      return user; 
     }); 
    }, 

    currentUser: function() { 
     return currentUser; 
    }, 

    isAuthenticated: function (force) { 
     var deferred = $q.defer(); 

     if (isAuthenticated && currentUser) { 
      deferred.resolve(currentUser); 
     } else { 
      return baseAuth.customGET('authenticated').then(function (user) { 
       deferred.resolve(currentUser); 
       isAuthenticated = true; 
       currentUser = user; 
       return user; 
      }); 
     } 

     return deferred.promise; 
    } 
}; 

Backend контроллеры:

Регистрация

register: function (req, res) { 
    RegistrationService.registerUser(req.body, function (err, user) { 
     if (err) { res.json(400, err); } 
     return res.json(user); 
    }); 
}, 

Вход

login: function (req, res) { 
    passport.authenticate('user', function (err, user, info) { 
     if (err) { return res.json(err); } 
     else if (user) { 
      req.logIn(user, function (err) { 
       if (err) { return res.json(err); } 
       return res.json(user); 
      }); 
     } else { return res.json(400, info); } 

    })(req, res); 
}, 

Тогда есть много разных кода на внутреннем интерфейсе, что все должно быть п retty standard, я старался следовать лучшим практикам, которые я узнал из учебников. Сообщите мне, если вы знаете, что происходит с моим приложением.

Ошибка при регистрации в консоли, когда я перехожу на http://localhost:9001/#/, где приложение работает (оно продолжается и продолжается и продолжается в цикле ...).

[Array [0], "получить", "подлинность", "http://localhost:1337/user/authenticated "] angular.js: 12314 ["", "получить", "подлинность", "http://localhost:1337/user/authenticated"] угловых. js: 12314 [Array [0], «get», «authenticated», «http://localhost:1337/user/authenticated»] angular.js: 12314 ["", "get", "authenticated", "http://localhost:1337/user/authenticated"] angular.js: 12314 [Array [0], «get», «authenticated», «http://localhost:1337/user/authenticated»] angular.js: 12314 ["", "get", "authenticated", "http://localhost:1337/user/authenticated"] angular.js: 12314 [Array [ 0], «get», «authentica» Ted " " http://localhost:1337/user/authenticated «]

ответ

0

Хорошо, я изменил контроллеры в API, а app.js файл в веб-интерфейсе. Так что проблема была где-то в одном из них.

Я считаю, что реальная проблема была в логике бэкэнд.

Я пошел на значительное упрощение ... и это сработало.

Изменено действие регистра на:

register: function (req, res) { 
    User.create(req.body, function (err, user) { 
     if (err) { next(err); } 
     return res.json(user); 
    }); 
}, 

Изменено действие входа на:

login: function (req, res, next) { 
    User.findOne({ email: req.body.email }, function (err, user) { 
     if (err) { return next(err); } 
     if (user) { 
      bcrypt.compare(req.body.password, user.password, function (err, valid) { 
       if (err) { next(err); } 
       if (valid) { 
        req.session.userAuthenticated = true; 
        req.session.authenticated = true; 
        req.session.User = user; 
        return res.json({ 
         message: "Logged in" 
        }); 
       } 
      }); 
     } else { next({ message: "Could not find a user with email " + req.body.email }); } 
    }); 
}, 

Это, кажется, сделали свое дело.

Смежные вопросы