I'm not really getting an error. NavCtrl.vm.user is undefined even though I can 
grab the UserFactory on the console and the user property is set correctly. 

> On Apr 4, 2016, at 7:17 PM, Tito <yosi...@gmail.com> wrote:
> 
> what error are you seeing? I am thinking you need the UserFactory before 
> NavCtrl?
> 
>> On Monday, April 4, 2016 at 12:04:30 PM UTC-7, Rj Ewing wrote:
>> Hello, I'm new to angular and having trouble accessing the user from my 
>> UserFactory. My NavCtrl isn't recognizing when UserFactory.user is updated 
>> (after authentication)
>> 
>> app.controller('NavCtrl', ['$scope', 'AuthFactory', 'UserFactory', function 
>> ($scope, AuthFactory, UserFactory) {
>>     var vm = this;
>>     vm.isLoggedIn = UserFactory.isLoggedIn;
>>     vm.isAdmin = UserFactory.isAdmin;
>>     vm.user = UserFactory.getUser();
>>     vm.logout = logout;
>> 
>>     function logout() {
>>         AuthFactory.logout();
>>         UserFactory.removeUser();
>>     }
>> }]);
>> 
>> app.controller("LoginCtrl", ['$scope', '$state', 'AuthFactory', 
>> 'UserFactory', function ($scope, $state, AuthFactory, UserFactory) {
>>     var vm = this;
>>     vm.credentials = {
>>         username: '',
>>         password: ''
>>     };
>>     vm.submit = submit;
>> 
>>     function submit() {
>>         AuthFactory.login(vm.credentials.username, vm.credentials.password)
>>             .success(function(data, status, headers, config) {
>>                 UserFactory.fetchUser();
>>                 $state.go('home');
>>             })
>>             .error(function(data, status, headers, config) {
>>                 if (angular.isDefined(data.usrMessage))
>>                     $scope.error = data.usrMessage;
>>                 else
>>                     $scope.error = "Server Error! Status code: " + status;
>>             });
>>     }
>> }]);
>> 
>> app.factory('UserFactory', ['$http', 'AuthFactory', function($http, 
>> AuthFactory) {
>>     var user;
>> 
>>     var userFactory = {
>>         getUser: getUser,
>>         isLoggedIn: isLoggedIn,
>>         isAdmin: isAdmin,
>>         removeUser: removeUser,
>>         fetchUser: fetchUser,
>>     };
>> 
>>     return userFactory;
>> 
>>     function isLoggedIn() {
>>         return AuthFactory.isAuthenticated();
>>     }
>> 
>>     function isAdmin() {
>>         return angular.isDefined(user) && user.projectAdmin == true;
>>     }
>> 
>>     function getUser() {
>>         return user;
>>     }
>> 
>>     function removeUser() {
>>         user = undefined;
>>     }
>> 
>>     function fetchUser() {
>>         if (isLoggedIn()) {
>>             $http.get('/biocode-fims/rest/users/profile')
>>                 .success(function (data, status, headers, config) {
>>                     user = data;
>>                 })
>>         }
>>     }
>> 
>> }]);
>> 
>> app.factory('AuthFactory', ['$http', '$rootScope', '$window', function 
>> ($http, $rootScope, $window) {
>>     var triedToRefresh = false;
>> 
>>     var authFactory = {
>>         isAuthenticated: isAuthenticated,
>>         login: login,
>>         logout: logout,
>>         refreshAccessToken: refreshAccessToken
>>     };
>> 
>>     return authFactory;
>> 
>>     function isAuthenticated() {
>>         return !angular.isUndefined($window.sessionStorage.accessToken);
>>     }
>>     
>>     function login(username, password) {
>>         var config = {
>>             method: 'POST',
>>             url: '/rest/authenticationService/oauth/accessToken',
>>             data: $.param({
>>                 redirect_uri: 'localhost:8080/oauth',
>>                 grant_type: 'password',
>>                 username: username,
>>                 password: password
>>             }),
>>             headers: {
>>                 'Content-Type': 'application/x-www-form-urlencoded'
>>             }
>>         };
>> 
>>         return $http(config)
>>             .success(function(data, status, headers, config) {
>>                 setOAuthTokens(data.access_token, data.refresh_token);
>> 
>>                 $rootScope.$broadcast('authChanged');
>>             })
>>             .error(function (data, status, headers, config) {
>>                 authFactory.logout();
>>             });
>>     }
>>     
>>     function logout() {
>>         delete $window.sessionStorage.accessToken;
>>         delete $window.sessionStorage.refreshToken;
>>     }
>> 
>>     function refreshAccessToken() {
>>         var refreshToken = $window.sessionStorage.refreshToken;
>>         if (!triedToRefresh && !angular.isUndefined(refreshToken)) {
>>             var config = {
>>                 method: 'POST',
>>                 url: '/rest/authenticationService/oauth/refresh',
>>                 data: $.param({
>>                     client_id: client_id,
>>                     client_secret: client_secret,
>>                     refresh_token: refreshToken
>>                 }),
>>                 headers: {
>>                     'Content-Type': 'application/x-www-form-urlencoded'
>>                 }
>>             };
>> 
>>             $http(config)
>>                 .success(function(data, status, headers, config) {
>>                     setOAuthTokens(data.access_token, data.refresh_token);
>>                     triedToRefresh = false;
>>                 })
>>                 .error(function (data, status, headers, config) {
>>                     triedToRefresh = true;
>>                     return false;
>>                 });
>>         }
>> 
>>         return false;
>>     }
>> 
>>     function setOAuthTokens(accessToken, refreshToken) {
>>         $window.sessionStorage.accessToken = accessToken;
>>         $window.sessionStorage.refreshToken = refreshToken;
>>     }
>> }]);
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "AngularJS" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/angular/k4AmH6h7Jic/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> angular+unsubscr...@googlegroups.com.
> To post to this group, send email to angular@googlegroups.com.
> Visit this group at https://groups.google.com/group/angular.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to angular+unsubscr...@googlegroups.com.
To post to this group, send email to angular@googlegroups.com.
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to