2

Ausgabe:EmberJS abrufen aktuellen Benutzer von Ember-simple-Auth Authenticator

Ich versuche, der aktuelle Benutzer durch die Erweiterung ember-simple-auth/authenticators/base von Ember-simple-Auth angemeldet abzurufen. Ich möchte nur eine Funktion erstellen currentUser() aufgerufen, die den Benutzernamen zurück, aber ich bekomme die Fehlermeldung, wenn ich die Funktion versuchen Aufruf:

Uncaught TypeError: this.get(...).currentUser is not a function(…) 

Versuch:

die Funktion currentUser(), sind unten definiert:

// app/authenticators/oauth2.js 
import Ember from 'ember'; 
import Base from 'ember-simple-auth/authenticators/base'; 

const RSVP = Ember.RSVP; 

export default Base.extend({ 
    restore() { 
     // restore user session 
    }, 
    currentUser() { 
     return this.get("username"); 
    }), 
    authenticate(username, password) { 
    this.set('username', username); 
    return new RSVP.Promise((resolve, reject) => { 
     Ember.$.ajax({ 
     url: config.baseURL + "accounts/login", 
     data: { 
      username: username, 
      password: password 
     }, 
     type: 'POST', 
     dataType: 'json', 
     contentType: 'application/x-www-form-urlencoded', 
     complete: (response)=> { 
      if (response.responseJSON.isAuthenticated) 
      resolve({isAuthenticated: true}); 
      else 
      reject("Wrong credentials."); 
     } 
     }); 
    }); 
    }, 
    invalidate() { 
    // log out 
    } 
}); 

rief ich die Funktion:

// app/controllers/application.js 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    session: Ember.inject.service('session'), 

    actions: { 
    alertSession() { 
     console.log("!! " + this.get('session').currentUser()); 
    }, 
    invalidateSession() { 
     this.get('session').invalidate(); 
     this.transitionToRoute('login'); 
    } 
    } 
}); 

this.get('session').invalidate(); funktioniert, aber this.get('session').currentUser(); wird den oben genannten Fehler zurückgeben. Bitte lassen Sie mich wissen, wie Sie das beheben können. Auch ich benutze Ember 2.5.1.

Danke!

Antwort

4

in Ihrer Anwendung Controller werden Sie currentUser() vom Sitzung Kundendienst anrufen, während Sie currentUser() in Ihrem oauth2.js Authenticator definiert haben. Die Ausführung könnte fehlschlagen, weil Sie die Sitzung Service nicht geändert haben, um einen Verweis auf die -Funktion Ihres Authentifikators zu haben.

Die andere Funktion wird erfolgreich ausgeführt, da der Sitzung Dienst die Referenz hat, die erforderlich ist, um die invalidate()-Funktion des angegebenen Authentifizierers aufzurufen.

Sie könnten die Vorschläge von ember-simple-auth für Managing a Current User verwenden. Damit können Sie eine Lösung erkunden, die einen isolierten currentUser Dienst verwendet, der in Verbindung mit der Sitzung Dienst funktioniert.

+0

Oh wow, ich habe nie realisiert, dass ember-simple-auth einen eigenen currentUser hat. Vielen Dank! – IFH

+0

Irgendwie wissen Sie, warum in app/services/current-user.js (von dem Link, den Sie mir geschickt haben) die Fehlermeldung "Kein Modell wurde gefunden für 'user'" angezeigt wird? Entschuldigung, ich bin neu bei Ember. – IFH

+1

In Ember hilft Ember Data beim Speichern und Abrufen von Daten von und zu Ihrem Server. Ein ** Modell ** ["definiert die Attribute, Beziehungen und das Verhalten der Daten, die Sie dem Benutzer präsentieren."] (Https://guides.emberjs.com/v2.5.0/models/#toc_models) Es sieht so aus als ob Sie ein ['user'-Modell in Ihrer App erstellen möchten, so] (https://ember-twiddle.com/ce25a4c6497906e95a87eff95ad410ec?openFiles=models.user.js%2C). – jacefarm

Verwandte Themen