2012-12-15 10 views
5

Mam interaktywną aplikację Ember, która ma wiele opcji, które są dostępne tylko dla zalogowanych użytkowników. Na przykład może istnieć lista postów, a następnie kolejny link do moich wpisów, które są istotne dla użytkownika.Jak przekazać status logowania użytkownika do mojej aplikacji Ember.js?

Istnieją dwie kwestie, które przychodzą mi do głowy:

  • jak mogę powiedzieć aplikację, gdy użytkownik jest zalogowany, a może jego dane?
  • Jak ukryć określone funkcje i elementy na podstawie jego stanu logowania?

Czy są jakieś sprawdzone metody postępowania w tym zakresie? Domyślam się, że sam proces logowania nie będzie tak skomplikowany, ale if logged_in? do_x else do_y jest dla mnie dużą niewiadomą. Gdzie powinienem przechowywać globalny stan użytkownika?

Odpowiedz

2

Jeśli używasz routera ember, to moja propozycja będzie architekta takiego rozwiązania

LoginController

App.LoginController = Ember.Controller.extend({ 
    login: function(params){ /* Your logic here */ }, 
    logout: function(params){ /* Your logic here */}, 

    user_data_hash: { first_name: "The", last_name: "Hobbit"}, 

    is_logged_in: (function() { 
     /* do some logic and return true or false */ 
    }).property('some_item_on_user_data_hash') 

    just_logged_in: (function() { 
     /* do some logic and return true or false */ 
    }).property('some_item_on_user_data_hash') 

Następnie w routerze przed umożliwiają nawigację do chronionego trasy, sprawdzasz za pomocą obiektu LoginController. Ten przykład pochodzi z this answer.

root: Ember.Route.extend({ 
    index: Ember.Route.extend({ 
     enter: function(router) { 
      var logged_in = router.get('loginController.is_logged_in'); /*Or in older ember builds `router.getPath('loginController.is_logged_in');`*/ 
      var just_logged_in = router.get('loginController.just_logged_in'); /*Or in older ember builds `router.getPath('loginController.just_logged_in');`*/ 
      Ember.run.next(function() { 
       if (logged_in && just_logged_in) { 
        router.transitionTo('loggedIn'); 
       } else if (!logged_in) { 
        router.transitionTo('loggedOut'); 
       } 
      }); 
     } 
    }), 

    loggedIn: Ember.Route.extend({ 
     // ... 
    }), 

    loggedOut: Ember.Route.extend({ 
     // ... 
    }) 
}) 
Powiązane problemy