AngularJS - Контроллер входа в систему при обнаружении cookieStore

У меня есть следующий код:

angular.module('myApp', ['ngRoute', 'ngCookies', ... , 'myApp.controllers'])
    .run(function($cookieStore) {
        console.log("Checking user credentials");
        if ($cookieStore.get('credentials') != null) {
            console.log("User credentials found in cookies");
            //LoginCtrl.login($cookieStore.get('credentials'));
        }
    })

Цель этого кода заключается в том, что при запуске приложение проверяет хранилище cookie на наличие сохраненных учетных данных. Если он находит учетные данные, я хочу, чтобы он вызывал функцию login() из контроллера входа, определенного ниже:

angular.module('myApp.controllers')
    .controller('LoginCtrl', function($scope, $log, $cookieStore, $location, $http, AuthenticationService, User) {

        $scope.login = function(credentials) {
            $log.debug("/POST to /api/login");
            AuthenticationService.login(credentials).success(function(user) {
                ...
            }).error(function(err) {
                ...
            });
        };

В настоящее время он жалуется, что LoginCtrl не существует, и я пробовал разные способы определить LoginCtrl (myApp.controllers.LoginCtrl, myApp.LoginCtrl и т. д.), но ни один из них не работает.

Любые советы по этому поводу, пожалуйста? Я не хочу сохранять объект пользователя в файле cookie, я бы предпочел сохранить учетные данные с хешированным паролем.

Спасибо за любую помощь и совет, который вы можете предоставить!


person Gary    schedule 21.01.2015    source источник


Ответы (1)


Шаблон для совместного использования кода между контроллерами — это службы, вам необходимо создать общую службу для аутентификации и использования этой службы между контроллерами.

person Leonardo Salles    schedule 21.01.2015
comment
Понятно, значит, мне следует определить LoginCtrl не как контроллер, а как службу? (т. е. services.js, а не controllers.js) - person Gary; 22.01.2015
comment
Сделал, все работает, спасибо. Потребовалось время, чтобы все это заработало, в основном переместил некоторые объекты в rootScope. - person Gary; 22.01.2015
comment
Да, rootScope - альтернатива;) - person Leonardo Salles; 23.01.2015