Issue with redirect on $location in Angularjs - Cannot read property 'path' of undefined

I have got plenty working, but at present I am stuck.

I have included a module for running parse.com authentication / login etc which I have added below.

I am trying to get the app to redirect on a successful login to /tab/friends by setting $location.path however I simply can't get it to work. In console I get Cannot read property 'path' of undefined.

I've been fighting this for two days, so any help would be super welcome :)

My parse related module:

    // JavaScript Document
    angular.module('AuthApp', [])
    .run(['$rootScope', function( $scope, $location) {
      $scope.scenario = 'Sign up';
      $scope.currentUser = Parse.User.current();
      $scope.location = $location;

          console.log(location);
          // $location.path('/tab/friends');

      function randomString(len, charSet) {
        charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        var randomString = '';
        for (var i = 0; i < len; i++) {
            var randomPoz = Math.floor(Math.random() * charSet.length);
            randomString += charSet.substring(randomPoz,randomPoz+1);
        }
        return randomString;
    }

    var randomValue = randomString(9);

      $scope.signUp = function(form, $location) {
        var user = new Parse.User();
        user.set("email", form.email);
        user.set("firstname", form.firstname);
        user.set("lastname", form.lastname);
        user.set("mobilenumber", form.mobilenumber);
        user.set("username", form.email);
        user.set("password", randomValue);

        user.signUp(null, {
          success: function(user) {
            $scope.currentUser = user;
            $scope.$apply();
          },
          error: function(user, error) {
            alert("Unable to sign up:  " + error.code + " " + error.message);
          }
        });    
      };



      $scope.logIn = function(form, $routeParams, $location) {
        Parse.User.logIn(form.username, form.password, {
          success: function(user) {
              console.log(location);
                  $location.path('/tab/friends');
            $scope.currentUser = user;




          },
          error: function(user, error) {
            alert("Unable to log in: " + error.code + " " + error.message);
          }
        });
      };

      $scope.logOut = function(form) {
        Parse.User.logOut();
        $scope.currentUser = null;

      };
    }]);

My app.'s code that starts everything up

// Ionic Starter App

// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
// 'starter.services' is found in services.js
// 'starter.controllers' is found in controllers.js

// here we add our modules first then after that we start up our main app/module of 'starter' in the brackets to the right of that we have to include the modules that we want to load in too



angular.module('AuthApp', []);
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'AuthApp'])




.run(function($ionicPlatform,$rootScope,$location) {

    $rootScope.location =$location;



    $ionicPlatform.ready(function($routeParams,$location) {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)



    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }



  });
})

.config(function($stateProvider, $urlRouterProvider) {


  // Ionic uses AngularUI Router which uses the concept of states
  // Learn more here: https://github.com/angular-ui/ui-router
  // Set up the various states which the app can be in.
  // Each state's controller can be found in controllers.js
  $stateProvider

    // setup an abstract state for the tabs directive
    .state('tab', {
      url: "/tab",
      abstract: true,
      templateUrl: "templates/tabs.html"
    })

    // Each tab has its own nav history stack:



    .state('tab.friends', {
      url: '/friends',
      views: {
        'tab-friends': {
          templateUrl: 'templates/tab-friends.html',
          controller: 'FriendsCtrl'
        }
      }
    })
    .state('tab.friend-detail', {
      url: '/friend/:friendId',
      views: {
        'tab-friends': {
          templateUrl: 'templates/friend-detail.html',
          controller: 'FriendDetailCtrl'
        }
      }
    })

        .state('tab.me', {
      url: '/me',
      views: {
        'tab-me': {
          templateUrl: 'templates/tab-me.html',
          controller: 'meCtrl'
        }
      }
    })


    .state('tab.settings', {
      url: '/settings',
      views: {
        'tab-settings': {
          templateUrl: 'templates/tab-settings.html',
          controller: 'SettingsCtrl'
        }
      }
    })

.state('signup', {
        url: '/signup',
        templateUrl: 'templates/signup.html',
         controller: 'SignupCtrl'
    })

     .state('login', {
        url: '/login',
        templateUrl: 'templates/login.html',
         controller: 'LoginCtrl'
    })





    .state('firstview', {
        url: '/firstview',
        templateUrl: 'templates/firstview.html',
         controller: 'FirstviewCtrl'
    })



  // if none of the above states are matched, use this as the fallback
  $urlRouterProvider.otherwise('/firstview');


});

In your code you have the following :

// JavaScript Document
angular.module('AuthApp', [])
.run(['$rootScope', function( $scope, $location) {

You are using dependency injection in the .run. Unfortunately, you are not injecting $location properly.

Change it to this :

// JavaScript Document
angular.module('AuthApp', [])
.run(['$rootScope', '$location', function( $scope, $location) {