2014-07-21 28 views
6

İstekte yer alan bir auth jetonu dahil etmek üzere tüm kimliği doğrulanmış eylemlerin kullanılmasını gerektiren bir API'yi seçiyorum, ancak oturum açana kadar auth jetonum yok.Set Rest Giriş yaptıktan sonra varsayılan öntanımlı istek parametreleri

Yalnızca app.config numaralı Restangular'deki varsayılan istek parametrelerini ayarlama örneklerini gördüm. Kullanıcı oturumu açtıktan ve User.auth_token ayarlanıncaya kadar bunu ayarlamak mümkün mü?

Böylece temelde yerine:

app.config(function(RestangularProvider) { 
    RestangularProvider.setDefaultRequestParams({ 
     auth_token: 'thisistheauthenticationtoken' 
    }); 
}); 

ihtiyacım var: Eğer böyle bir şey yapmak istiyorsanız

app.config(function(RestangularProvider) { 
    RestangularProvider.setDefaultRequestParams({ 
     auth_token: User.auth_token 
    }); 
}); 
+0

Bunu çözmek için aldın kullanmayı deneyin kullanmanın ? –

+0

Aynı konuyla uğraşıyorum ... herhangi bir gelişme var mı? (+1) – troig

cevap

0

, sen app.cofig verdiği kodu kaldırmak ve sizi taşımak gerekir user kullanıcı giriş yapmıştır.

Restalgular hizmetini kullanarak herhangi bir uygulama alanında varsayılan olarak varsayılanRestParams'ı ayarlayabilirsiniz.

Daha fazla bilgi için bkz. https://github.com/mgonto/restangular#setdefaultrequestparams.

+0

Bu satırları "auth_token" kullanılabilir hale getirdikten sonra taşımaya çalıştım ama hiçbir şey değişmiyor gibi görünüyor. – theintellects

2

Bu eski bir iş parçacığı olduğunu biliyorum, ancak bu SO sorusu Googling'ken (evet, Google'ı bir fiil olarak kullandım ... bir anlaşma için kullandım: P) bir çözüm için görünmeye devam ettim. çözümüm. Umarım OP'ye veya bu sayfadan gelebilecek başkalarına yardımcı olur.

angular.module("app").factory("UserService", [ 
    "$rootScope", 
    "$state", 
    "$q", 
    "Restangular", 
    function ($rootScope, $state, $q, Restangular) { 
     var UserSvc = {}; 
     var Identity; 

     /* 
      This creates a scoped copy of Restangular 
      Normally this is where you would use setDefaultRequestParams, 
      but it would only affect this scope and not ALL API requests in your app 
     */ 
     var UsersAPI = Restangular.withConfig(function (RestangularConfigurer) { 
      RestangularConfigurer.setBaseUrl("api/1.0/users"); 
     }); 

     UserSvc.login = function (credentials) { 
      var $defer = $q.defer(); 

      UsersAPI.all("start-session").post(credentials).then(function(respData){ 
       if (respData.apikey) { 
        Identity = respData.plain(); 

        /* 
         User is authenticated and API key is obtained from server response 

         Note how I do NOT use the setDefaultRequestParams function: 
         If we do the withConfig/setDefaultRequestParams, it only affects local scope, not global 
         This method modifies the ROOT Restangular object and 
         will then propegate through all future use of Restangular in your app 
        */ 
        Restangular.configuration.defaultRequestParams.common.apikey = Identity.apikey; 


        if ($rootScope.toState && $rootScope.toState.name != "login") { 
         $state.go($rootScope.toState.name, $rootScope.toStateParams || {}); 
        } else { 
         $state.go("app.dashboard"); 
        } 

        $defer.resolve(Identity); 
       } 
       else { 
        Identity = undefined; 

        $defer.reject(Identity); 
       } 
      },function (respData) { 
       $defer.reject(respData); 
      }); 

      return $defer.promise; 

     }; 

     return UserSvc; 
    } 
]); 
2

Neden belirtecini başlığın karşısındaki karşılığı olarak belirlediniz? Öyle olsun.

Restangular.setDefaultHeaders({ authentication: 'bearer ' + token.authentication }); 
0

Üzerinde çalıştığım bir projeden daha Açısal-imsi örnek: Benim durumumda

angular.module('app', [ 'restangular' ]) 
    .factory('API', function(Restangular){ 
    return Restangular.withConfig(function(config){ 
     config 
     .setBaseUrl('https://api.example.com') 
     // etc etc etc 
     ; // END config 
    }); 
    }) 
    .factory('Auth', function(API){ 
    return { 
     login: function(credentials){ 
     // Assuming I just POST /session/new to get an OAuth token, 
     // which is totally not a thing that OAuth should do. 
     API.one('session').post('new', credentials) 
      .then(function(auth){ // Assuming `auth = { access_token: '...' }` 
      API.setDefaultHeaders({ 
       Authorization: 'bearer ' + auth.access_token 
       // Assuming OAuth Bearer Token 
      }); 
      }) 
     }, 
     logout: function(){ /* . . . */ } 
    }; 
    }) 
    .controller('MainController', function(API, Auth){ 
    var self = this; 

    self.user = { }; 

    this.login = function(credentials){ 
     Auth.login(credentials).then(function(){ 
     self.user = API.one('user').$object; 
     }); 
    }); 
    }) 
; // END module(app) 
0

Aşağıdaki kod, her istek için belirtecini depodan okuyacaktır.

app.config(function(RestangularProvider) { 

    //Injext $cookies manually (there might be better ways to do this) 
    var $cookies; 
    angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) { 
     $cookies = _$cookies_; 
    }]); 

    RestangularProvider.setDefaultHeaders({ 
     Authorization: function() { 
      return $cookies.get('token'); 
     } 
    }); 
}); 
0

Ben de bununla uğraştım. Bunun yerine

RestangularProvider.setDefaultRequestParams({ 
    auth_token: 'thisistheauthenticationtoken' 
}); 

Restangular.setDefaultRequestParams({auth_token:'thisistheauthenticationtoken'}); 
İlgili konular