Pregunta

Estoy tratando de construir algo de autenticación dentro de mi aplicación Emberjs, por lo que después de que el usuario haya iniciado sesión, guardo la ID de usuario y un token usando el almacenamiento local. Esto funciona según lo planeado, luego he creado una configuración de propiedades calculadas para ayudar a determinar si los jugadores han iniciado sesión.

MyApp.ApplicationController = Ember.Controller.extend

  currentUser: (->
    @AuthManager.get('apiKey.user')
  ).property('AuthManager.apiKey')

  isAuthenticated: (->
    @AuthManager.isAuthenticated
  ).property('AuthManager.apiKey')

Como puede ver, simplemente obtenga los datos de mi AuthManager. Ahora mi gran problema es que estas propiedades calculadas no se actualizan, ni siquiera los cambios de apikey. Así que traté de depurarlo.

  currentUser: (->
    @AuthManager.get('apiKey.user')
  ).property('AuthManager.apiKey')

  isAuthenticated: (->
    #@AuthManager.isAuthenticated
    console.log "Something changed to " + @get('AuthManager.apiKey.accessToken')

    self = @
    setInterval ->
      console.log self.get('AuthManager.apiKey.accessToken')
    , 1000
  ).property('AuthManager.apiKey.accessToken')

Primero, el Apikey está indefinido, pero después de que se carga el usuario, el Apikeys está configurado, pero la propiedad no puede ver este cambio.

Esta es la salida del código.

enter image description here

Como puede ver los cambios de los Apikeys, pero "algo cambiado a" solo se imprime una vez?

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Creo que tu problema es porque el AuthManager comienza con una letra mayúscula, cuando usa @set('AuthManager.accessToken', ...) Ember Busque el camino global, como window.AuthManager.accessToken en vez de controllerInstance.AuthManager.accessToken Así que refactorizar su código para usar solo authManager.

setinterval desencadenar varias veces, porque es un temporizador que se ejecuta repetidamente hasta clearInterval se llama, con la identificación devuelta de setInterval

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top