Prometheus
Prometheus

Reputation: 33625

How to use AngularJS to store a 'Token' for the lifetime of the app?

I'm using AngularJS to login a user (using Restangular). The login controller gets returned a 'Token' which I then need to use on every request thereafter.

My question is, what is the best way to store this Token using AngularJS? It needs to exist for the lifetime of the app.

I was looking at services but I have to keep injecting it into the controllers on to keep it alive.

Upvotes: 2

Views: 158

Answers (2)

hovitya
hovitya

Reputation: 539

I think the best way is store this 'Token' in the $rootScope.

myapp.controller('loginCtrl', function($scope, $rootScope) {
    ...
    $rootScope.token = Token;
    ...
});

Then use http interceptor to inject this as for example GET parameter to every query

myapp.factory('httpTokenInterceptor', function ($rootScope) {
  return {
    request: function (config) {
      var token = $rootScope.token;
      if (token) {
          config.url =  URI(config.url).addSearch({'token':token}).toString();
      }
      return config;
    }
  };
});

myapp.config(function ($httpProvider) {
  $httpProvider.interceptors.push('httpTokenInterceptor');
});

Upvotes: 2

Liad Livnat
Liad Livnat

Reputation: 7475

lifetime is not promise as far as you are using web apps, but if you want you can use localstorage, here is an example service how to use localstorage in angular, you can add it to service.js file:

var storeService = innovidServices.factory('storeService', function() {

    var service =
    {
        setClientData:function(client_details)
        {
            window.localStorage.setItem( "client_data", JSON.stringify(client_details) );
            client_data = client_details;
        },
        getClientData:function()
        {
            if (client_data == null)
            {
                client_data = JSON.parse(window.localStorage.getItem("client_data"));
            }
            return client_data;
        }
    }

    var client_data = null;

    return service;
});

Upvotes: 2

Related Questions