2016-08-31 13 views
1

Ember.jsを初めて使用していて、Ember Simple Authを使用しています。現在のユーザーを取得する方法を見つけるのに苦労しています。ログインして、ユーザーが管理者かどうかを確認するので、管理者だけがテンプレートに考えを表示することができます。現在、Ember Simple Auth TokenとRuby on Railsバックエンドを使用してjwt認証を使用しています。私を正しい方向に向ける助けとなることは素晴らしいことです。Ember.jsでEmber Simple Authを使用して管理ビューを設定する

私は現在、ユーザーはJWTは、トークンとUSER_IDを返して認証すると https://github.com/simplabs/ember-simple-auth/blob/master/guides/managing-current-user.md

を仕事にエンバー簡単な認証に例を取得しようとしました。問題は、ユーザーがログインしているとき、私は名前やユーザーに関するすべての詳細情報が届かないということである。

私はこの

{{currentUser.user.name}} 
を行うことによって、(間違っているかもしれない)現在のユーザーにアクセスしようとしています

コントローラ//

import Ember from 'ember'; 

const { inject: { service }, Component } = Ember; 

export default Ember.Controller.extend({ 
    session:  service('session'), 
    currentUser: service('current-user') 
}); 

ルートをapplication.js

import Ember from 'ember'; 
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; 

const { service } = Ember.inject; 

export default Ember.Route.extend(ApplicationRouteMixin, { 
    currentUser: service(), 

    beforeModel() { 
    return this._loadCurrentUser(); 
    }, 

    sessionAuthenticated() { 
    this._super(...arguments); 
    this._loadCurrentUser().catch(() => this.get('session').invalidate()); 
    }, 

    _loadCurrentUser() { 
    return this.get('currentUser').load(); 
    } 
}); 

Sをapplication.js ervices /電流user.jsの

import Ember from 'ember'; 

const { inject: { service }, isEmpty, RSVP } = Ember; 

export default Ember.Service.extend({ 
    session: service('session'), 
    store: service(), 

    load() { 
    return new RSVP.Promise((resolve, reject) => { 
     let userId = this.get('session.data.authenticated.user_id'); 
     if (!isEmpty(userId)) { 
     return this.get('store').find('user', userId).then((user) => { 
      this.set('user', user); 
     }, reject); 
     } else { 
     resolve(); 
     } 
    }); 
    } 
}); 
+0

を呼び出す必要があります。あなたは何を試しましたか?問題は何ですか? –

+0

私は使用した例と使用している現在のコードを使って投稿を更新しました。 –

答えて

0

あなたはESAのドキュメントが豊富ですfindRecord

load() { 
    return new RSVP.Promise((resolve, reject) => { 
     let userId = this.get('session.data.authenticated.user_id'); 
     if (!isEmpty(userId)) { 
     return this.get('store').findRecord('user', userId).then((user) => { 
      this.set('user', user); 
      resolve(); 
     }, reject); 
     } else { 
     resolve(); 
     } 
    }); 
    } 
+0

それも解決しなかったようです。役立つ場合、Ember Inspectorはユーザーがユーザーモデルに読み込まれていないことを示しています。しかし、これがどのように動作しているかをよりよく理解するためには、トークンとともに送信されているIDを送信し、/ users /:idにGETを送信していますか? –

+0

@MattBrowningはい、それは方法です。バックエンドからユーザをフェッチするためには、 '' '' '' '' '' ''を読み込む必要があります。さらに、 'session.data.authenticated.user_id'が値を持っているかどうかを確認する –

関連する問題