Update: per Kato's reply, I created example codes. see below.
Simply copying the code at https://www.firebase.com/docs/web/libraries/angular/guide.html#section-angular-authentication results in a working codepen (here it is as a github gist) that logs me in/out, yet does not "refresh" the data, i.e. the expression {{ user.facebook.displayName }} is not really bound.
The question: Is there a way to make the controller actually bind to the logged-in state?
Note I: there is no direct link to the code on firebase.com, is the code that appears under the sentence
Pulling some of these concepts together, we can create a login form with dynamic content based on the user's authentication state
Note II: in order to make the copied code work, you have to replace the firebase url with your own.
edit - just discovered the "code snippet" feature:
var app = angular.module("sampleApp", ["firebase"]);
// let's create a re-usable factory that generates the $firebaseAuth instance
app.factory("Auth", ["$firebaseAuth", function($firebaseAuth) {
var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
return $firebaseAuth(ref);
}]);
// and use it in our controller
app.controller("SampleCtrl", ["$scope", "Auth", function($scope, Auth) {
$scope.auth = Auth;
$scope.user = $scope.auth.$getAuth();
}])
<html ng-app="sampleApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.0.4/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.9.0/angularfire.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="SampleCtrl">
<div ng-show="user">
<p>Hello, {{ user.facebook.displayName }}</p>
<button ng-click="auth.$unauth()">Logout</button>
</div>
<div ng-hide="user">
<p>Welcome, please log in.</p>
<button ng-click="auth.$authWithOAuthPopup('facebook')">Login</button>
</div>
</body>
</html>