vzhen
vzhen

Reputation: 11157

How to get the authenticated user info and use in all controllers and services?

I'm using angularFireAuth and I want to retrieve the logged in user's info and use in all the controllers or services when the app is initial.

Currently, I used this in every controller but i having some problem.

$scope.$on("angularFireAuth:login", function(evt, user){ 
  console.log(user);
});

The callback will not call if it is not a full page load or return null when app initial.

I need some tips for how can I return the authenticated user's info so I can use when app is initial and in all the controllers and services.

Example

When in controller or services

Upvotes: 2

Views: 12228

Answers (2)

manojlds
manojlds

Reputation: 301337

I would start with a userService for this:

angular.module('EventBaseApp').service('userService', function userService() {
    return {
        isLogged: false,
        username: null
    }

});

And write a LoginCtrl controller:

angular.module('EventBaseApp')
  .controller('LoginCtrl', function ($scope, userService, angularFireAuth) {
    var url = "https://example.firebaseio.com";
    angularFireAuth.initialize(url, {scope: $scope, name: "user"});

    $scope.login = function() {
        angularFireAuth.login("github");

    };
    $scope.logout = function() {
        angularFireAuth.logout();
    };

    $scope.$on("angularFireAuth:login", function(evt, user) {
      userService.username = $scope.user;
      userService.isLogged = true;
    });

    $scope.$on("angularFireAuth:logout", function(evt) {
      userService.isLogged = false;
      userService.username = null;
    });
});

Inject the userService anywhere you want the user.

My app that am currently working on that uses this - https://github.com/manojlds/EventBase/blob/master/app/scripts/controllers/login.js

Based on ideas presented here - http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app

Upvotes: 2

Anton
Anton

Reputation: 7719

i'm not sure quite what your question is. but if you are looking to authorise once rather than in each controller, you can put the code into the module instead and put it into the $rootScope.

var myapp = angular.module('myapp').run(
    function ($rootScope) {
        $rootScope.user = null;

        $rootScope.$on("angularFireAuth:login", function (evt, user) {
            $rootScope.user = user;

        });
    });

Upvotes: 1

Related Questions