2012-12-15 12 views
5

Ich habe eine interaktive Ember-App, die viele Optionen bietet, die nur für angemeldete Benutzer verfügbar sind. Zum Beispiel könnte es eine Liste von Posts geben, und dann gibt es einen weiteren Link zu meine Posts, die für den Benutzer relevant sind.Wie sollte ich den Anmeldestatus des Benutzers an meine Ember.js-Anwendung weitergeben?

Es gibt zwei Probleme, die mir in den Sinn kommen:

  • wie kann ich feststellen, die App, wenn ein Benutzer angemeldet ist, und vielleicht seine Daten?
  • Wie verbirg ich bestimmte Funktionen und Elemente basierend auf seinem Login-Status?

Gibt es Best Practices für die Annäherung? Ich denke, der Login-Prozess selbst wird nicht so kompliziert sein, aber die ist eine große Unbekannte für mich atm. Wo sollte ich den globalen Benutzerstatus speichern?

Antwort

2

Wenn Sie die glut Router verwenden, dann mein Vorschlag

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') 

Dann in Ihrem Router Architekten eine Lösung wie dieser

LoginController sein würde, bevor Sie die Navigation zu einem geschützten Route ermöglichen, Sie überprüfen mit dem LoginController Objekt. Dieses Beispiel stammt von 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({ 
     // ... 
    }) 
}) 
Verwandte Themen