La información del perfil de usuario se restablece después de cada actualización de la página (usando Hello.js)

Estoy usando Hello.js en mi aplicación AngularJS para permitir que los usuarios se autentiquen con Facebook. Una vez que el usuario inicia session y obtengo la información del usuario de Facebook, utilizo el json y obtengo el object del usuario de mi propia database y lo almaceno en el ámbito raíz para que varias áreas de mi sitio puedan acceder a la información del perfil del usuario ( por ejemplo, en el encabezado donde muestro el nombre del usuario conectado).

Aquí está el service que maneja las cosas de authentication

angular.module('myApp') .factory('userService', function($rootScope, $location) { // Hello.js Functions hello.init({ facebook : '1234567891234545' }); var service = { isLoggedIn: function() { return $rootScope.loggedInUser != null; }, login: function() { hello('facebook').login( function() { hello('facebook').api('/me').success(function(json) { $rootScope.loggedInUser = getUserFromMyOwnAPI(json.id); $rootScope.$apply(function() { $location.path('/'); }); }); }); }, logout: function() { hello('facebook').logout( function() { $rootScope.loggedInUser = null; $location.path('/'); }); }, loggedInUser: function(){ return $rootScope.loggedInUser; } } return service; }) 

El problema que estoy teniendo es que cada vez que actualizo la página, pierdo la información del perfil. Tiene sentido porque $ rootScope.loggedInUser que almacena los datos del usuario (basado en el json que obtuve de Facebook) se reiniciaría después de una actualización de página.

¿Cómo debería manejar esto? ¿Debería poner los datos del usuario en localStorage en lugar de rootScope? ¿O debería de alguna manera estar aprovechando hello ('facebook'). Api ('/ me') cada vez que quiero hacer reference a la información de perfil del usuario?

Noté que hello.js ya almacena algo en localStorage:

 key: hello {"facebook":{"state":"","access_token":"blahblahblah","expires_in":6776,"https":"1","client_id":"12345","network":"facebook","display":"none","networkingirect_uri":"http://adodson.com/hello.js/networkingirect.html","scope":"basic","expires":1412632794.806}} 

Entonces me pregunto si estaría duplicando el esfuerzo agregando el object de usuario a localStorage.

La respuesta a esta pregunta es subjetiva y podría argumentarse de diferentes maneras. Sin embargo, según su pregunta y comentario, mi opinión es que conservar la información del perfil del usuario (no confidencial) en el almacenamiento local sería una buena opción para proporcionar una experiencia de usuario ininterrumpida.

Nunca almacene la información del usuario, incluida la información de la networking social, pero no de forma limitada, en el almacenamiento local, las cookies y / u otros mecanismos no seguros. Incluso si necesita comprometer una información no tan crítica, utilice la memory (como las variables de ámbito). También debe tener en count las complejidades que surgen al almacenar información de usuario en localStorage, como cuando el usuario cierra session en la networking social. Ahora, el seguimiento de session es tan antiguo de WWW. ¿Cómo rastrear las sesiones? Hay innumerables artículos discutiendo los pro y contras de Cookies, Json Web Tokens, Session State en el server, etc. Mi opinión personal es almacenar la mayor parte de la información del usuario en el server y vincular al usuario actual a esa session usando una session ID almacenado en cualquier medio posible como Cookie, Query Param, localStorage, etc. Eso solo es útil si tiene un back-end y su OAuth le proporciona un token. No veo ningún lugar en hello.js que te proporcione un token. Por lo tanto, dado que no debe almacenar ninguna información de usuario del lado del cliente en el browser, y hello.js no le proporciona un token para reutilizar en llamadas posteriores, mi consejo para usted es iniciar session con el usuario cada vez.

sobre tu código:

Como Adin y DanArl ya indicaron, puede implementar el process del seguimiento de la session del usuario de muchas maneras diferentes, preferiblemente del lado del server, identificadas mediante algún tipo de identificador almacenado en una cookie de session.

Con respecto a su código real, puede echar un vistazo a jshint: Tres advertencias

 10 Use '!==' to compare with 'null'. 31 Missing semicolon. 34 Missing semicolon. Three undefined variables 1 angular 4 hello 13 hello 14 hello 23 hello 15 getUserFromMyOwnAPI 

Debería insert 'hello' correctamente, pasando 'hola' a su 'userService'. (eche un vistazo a: https://docs.angularjs.org/guide/di si desea get más información sobre la dependency injection en AngularJS)

acerca de su problema real:

Después de que hayas recibido el token, de tu forma preferida de almacenarlo, deberías poder inspeccionar y validar el token a través de:

 GET graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token} 

Fuente: https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.1#checktoken

Entonces puedes intentar pasar esta información a helljs (estoy acostumbrado a esta biblioteca)