2

Issue:EmberJS получить текущий пользователь из уголька-простого-AUTH идентифицирующого

Я пытаюсь получить текущий пользователь вошел в системе с Ember-простого-AUTH путем расширения ember-simple-auth/authenticators/base. Я просто хочу, чтобы создать функцию, называемую currentUser(), которая будет возвращать имя пользователя, но я получаю ошибку, когда я пытаюсь вызова функции:

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

Попытка:

функция currentUser() определяется следующим образом:

// 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 
    } 
}); 

я назвал функцию с помощью:

// 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(); работает, но this.get('session').currentUser(); вернет ошибку, упомянутую выше. Пожалуйста, дайте мне знать, как это исправить. Кроме того, я использую Ember 2.5.1.

Спасибо!

ответ

4

В контроллере приложения, вы вызываете currentUser() от сеанса службы, в то время как вы определили currentUser() в вашем oauth2.js Authenticator. Выполнение может быть неудачным, потому что вы не изменили службу , чтобы иметь ссылку на свою функцию аутентификатора currentUser.

Другая функция выполняется успешно, поскольку служба имеет ссылку, которая необходима для вызова функции invalidate() назначенного аутентификатора.

Возможно, вы можете использовать предложения ember-simple-auth для Managing a Current User. С помощью этого вы можете изучить решение, которое использует изолированную службу currentUser, которая работает в сочетании с сеансом .

+0

О, ничего себе, я никогда не понимал, что у ember-simple-auth есть свой собственный currentUser. Спасибо! – IFH

+0

Насколько вам известно, почему внутри app/services/current-user.js (из ссылки, которую вы мне отправили) появляется сообщение об ошибке «Модель не найдена для пользователя»? Извините, я новичок в ember. – IFH

+1

В Ember, Ember Data помогает сохранять и извлекать данные на ваш сервер и обратно. Модель ** ** ** определяет атрибуты, отношения и поведение данных, которые вы представляете пользователю. »(Https://guides.emberjs.com/v2.5.0/models/#toc_models). Он выглядит как будто вам нужно создать модель '' user' в вашем приложении, например [https://ember-twiddle.com/ce25a4c6497906e95a87eff95ad410ec?openFiles=models.user.js%2C). – jacefarm

 Смежные вопросы

  • Нет связанных вопросов^_^