J'utilise Ember-simple-auth et j'essaie de renvoyer les données de mon authentificateur personnalisé dans le contrôleur qui a effectué l'authentification.Ember RSVP Promise resolve renvoie toujours une valeur indéfinie
dans mes authentificateur/custom.js:
authenticate(identification, password) {
return new Ember.RSVP.Promise(function (resolve, reject) {
var loginURL = 'https://domain.com/login';
var authObj = Ember.Object.create({"identity":identification,"password":password});
var hash = authObj.getProperties('identity', 'password');
var stringHash = JSON.stringify(hash);
var xhr = new XMLHttpRequest();
xhr.open("post", loginURL);
xhr.onreadystatechange = handler;
xhr.responseType = 'json';
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Format', 'JSON');
xhr.send(stringHash);
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
console.log('response is: ',this.response); /// <-- returns good response data
resolve(this.response);
} else {
reject('failed with status: [' + this.status + ']');
}
}
}
et dans mon contrôleur de connexion:
authenticate() {
let { identification, password } = this.getProperties('identification', 'password');
var session = this.get('session');
session.authenticate('authenticator:custom', identification, password).then((reason) => {
console.log('failed login',reason);
});
}
},
Mais je voudrais vraiment être capable de gérer la fonction resolve
et l'obtenir est value
charge utile de la promesse authenticate
.
Si je change le .catch
à une .then
la fonction de réponse est appelé avec succès, mais a toujours une valeur non définie comme charge utile:
session.authenticate('authenticator:custom', identification, password).then(
(response) => {
console.log('response: ',response); //// <---- always 'undefined'
this.setUserWithData(response);
},
(reason) => {
this.set('Login failed: ',reason);
}
);
}
Même si je restructure la promesse, réorganiser la façon dont la fonction est appelée, la La première fonction d'un RSVP est appelée avec succès, mais a une charge utile non définie. La deuxième fonction d'un RSVP a toujours une charge utile correcte.
J'ai essayé inverser la résolution/rejeter:
Ember.RSVP.Promise(function (resolve, reject){
à
Ember.RSVP.Promise(function (reject, resolve){
et la fonction porte avec succès la réponse, mais le simple auth croit maintenant qu'elle n'a pas son autorisation. Je voudrais être en mesure de transmettre la charge utile de réponse dans mon contrôleur. Ou, si cela ne peut pas être fait, comment puis-je injecter des données de la réponse dans ma session et mon magasin de données de braises? Il ne semblait pas judicieux d'appeler et d'insérer des données dans le magasin à partir de la fonction d'authentification de l'authentificateur.
Je vois. Ceci explique cela. Il semble cependant rompre la syntaxe attendue. Merci pour votre travail sur Simple-auth. Existe-t-il un exemple de création d'un authentificateur personnalisé? Tous les liens que vous avez précédemment publiés sur des exemples ne fonctionnent plus. Il est difficile de trouver les meilleures pratiques pour un authentificateur simple mais personnalisé. – jtf