2016-04-01 60 views
0

Python/flask/django dünyasından birkaç hafta önce açısal ve İyonik (ve Firebase) ile oynamaya başladım. Genel bir REST API'sı için bir kayıt/oturum açma işlevselliğini uygulamaya çalışıyorum - bir kullanıcı/geçiş combo gönderirsiniz, bir belirteç alırsınız.İyonik, Açısal kimlik doğrulaması

Python'a (ve diğer sunucu tarafı dillerine bağlı kaldığımda çok yanlış mıyım?) desenleri - yerel atamada auth jetonunu depolamak için bir fabrika servisi yapmak ve jetonun mevcut ve geçerli olması durumunda her durum/rota için bir kontrol yapmak yerine, eğer giriş sayfasına yönlendirme yapmayı düşünmüyorsam? Bu aşamada, verimli ve zarif olandan ziyade tamamen isteyerek çözebileceğim bir çözümü tercih ederim.

+1

http: //stackoverflow.com/questions/29719894/login-with-ionic-and-material-design/29934933#29934933 –

+0

m8 sizde var mı ver site uygulaması ve sadece kod iyonik site ister misiniz? – vivid

+0

Evet, ilk bağlantı anlamlıdır. Sunucu tarafı bir sorun değil, kullanıcı oturum açtığında ve giriş sayfasına yönlendirmek için "kontrol" işlemi ile ilgileniyorum, – freethrow

cevap

2

Bu uygulama kolaydır kullanıyordum ama bunu sen :)

oauth.js bu anlamaya yardımcı olacaktır önleme kullanmak ve ayrıca u koduna benimsemek gerekir böylece onun modülünü gerektirir ama umut olabilir

define('oAuth',['app'],function(app){ 
     return app.module('appName').factory("oAuth",["$q", "$http", "$localStorage", function ($q, $http, $localStorage) { 
     var oAuthModule = {}; 
     var _authorize = function(username,password){ 
      var deferred = $q.defer(); 
      var data = "grant_type=password&client_id=CLIENT&username="+username+"&password="+password; 
      var host = $localStorage.host + "/token"; 
      $http.post(host,data, { headers: { "Content-Type": "application/x-www-form-urlencoded"}}).then(function(s){ 
      $localStorage.authorizationData = s.data; 
      $localStorage.tokenAwardTime = Date.now(); 
      deferred.resolve("success"); 
      },function(error){ 
      deferred.reject(error) 
      }); 
      return deferred.promise; 
     }; 
     var _refreshToken = function(){ 
      var deferred = $q.defer(); 
      var data = "grant_type=refresh_token&client_id=CLIENT&refresh_token="+$localStorage.authorizationData.refresh_token; 
      var host = $localStorage.host + "/token"; 
      $http.post(host,data, { headers: { "Content-Type": "application/x-www-form-urlencoded"}}).then(function(s){ 
      $localStorage.authorizationData = s.data; 
      $localStorage.tokenAwardTime = Date.now(); 
      deferred.resolve("success"); 
      },function(error){ 
      deferred.reject(error) 
      }); 
      return deferred.promise; 
     }; 
     var _updateHeader = function(){ 
      var deferred = $q.defer(); 
      try { 
      if($localStorage.authorizationData.token_type && $localStorage.authorizationData.access_token){ 
       $http.defaults.headers.common.Authorization = $localStorage.authorizationData.token_type + " " + $localStorage.authorizationData.access_token; 
      }else{ 
       deferred.reject('Code Undefined'); 
      } 
      } 
      catch(err) { 
      deferred.reject(err); 
      } 
      finally { 
      deferred.resolve("Code done"); 
      } 

      return deferred.promise; 
     }; 
     oAuthModule.updateHeader = _updateHeader; 
     oAuthModule.auth = _authorize; 
     oAuthModule.refresh = _refreshToken; 
     return oAuthModule; 
     }]) 
    }); 

Her istekte setupHeader(); belirtecin zamanın yakınında olup olmadığını kontrol eder.

var setupHeader = function(){ 
var diffrence = (new Date(Date.now()).getTime() - new Date($localStorage.tokenAwardTime).getTime())/1000; 
if(diffrence >= 3500){ 
    socialveoOAuth.refresh().then(function(s){ 
     $http.defaults.headers.common.Authorization = $localStorage.authorizationData.token_type + " " + $localStorage.authorizationData.access_token; 
    },function(e){ 
    $state.go('app.login'); 
    }); 
} 
else{ 
    $http.defaults.headers.common.Authorization = $localStorage.authorizationData.token_type + " " + $localStorage.authorizationData.access_token; 
} 
}; 

ve gibi kullanabilirsiniz:

_requests.LogOut = function(){ 
var deferred = $q.defer(); 
setupHeader(); 
$http.get($localStorage.host+"/logout/").then(
    function(suc){ 
    deferred.resolve(suc.data.data); 
    },function(err){ 
    deferred.reject(err); 

    } 
); 
return deferred.promise; 
}; 

ve belirtecinin yenilenmesi outoftime veya kovduğunuzda ben sadece bu size yardımcı olacaktır

$state.go('app.login'); 

umut kullanın; P

+0

wow! Teşekkür ederim! – freethrow

+0

sadece cordovasql aswell'i kullanabileceğiniz localstorage olsun: P – vivid