5

Rails 4 の上に純粋な Ember.js アプリを書いて遊んでいますが、ユーザー管理がどのように処理されるのか戸惑っています。私の最初のアイデアは、純粋なサーバー レンダリング テンプレート (ERB) を使用してユーザー登録と Devise 経由でのログインを行い、アプリの残りの部分で Ember フレームワークを使用することでした。

これに関する問題は、Ember が <body> タグを引き継いでビューポート全体を制御したいということです。このように、アプリのどの側面がサーバーでレンダリングされた Erb テンプレートを使用する必要があり、どの側面が Ember ロジックに存在する必要があるかを選択することはできません。

すでにログインしているユーザーを処理する方法の例はたくさんありますが、ember-authは認証認識コントローラーを容易にするために興味深いように見えますが、完全なユーザー サインアップ エクスペリエンスを で行うためのチュートリアルや提案は見たことがありませんエンバーアプリ。

適切なコードが見つからないという技術的な観点から、またはこのようにしてはならないアーキテクチャの観点から、何か不足していますか?

これは、ember-rails (0.12.0 w/1.0.0.rc3.3 ember-source)、Rails 4.0.0.rc1、Devise (rails4 ブランチ) を使用しています。

4

3 に答える 3

6

ember-authここで開発。

実際には、ユーザーのサインアップに特別な処理は必要ありません。userモデルの作成には認証が必要ないという意味で、ユーザーのサインアップを別のモデルの場合と同様に扱います。(ただし、編集または削除には認証が必要です。)

実装は次のようになります。

App.User = DS.Model.extend
  email: DS.attr 'string'
  password: DS.attr 'string'

App.UsersNewRoute = Em.Route.extend
  model: ->
    App.User.createRecord()

App.UsersNewController = Em.ObjectController.extend 
  create: ->
    @store.commit()

エラーチェック、テンプレート コードなどは、簡潔にするために省略されています。

于 2013-05-08T05:39:41.677 に答える
1

上記の解決策はほとんどありませんが、私にとってはうまくいきませんでした。うまくいったのは次のとおりです。

didCreate: function() {
  var user = App.Auth.get('_response').response.user;
  App.Auth.signIn({
    data: {
      'email':    user.email,
      'password': this.get('password'),
      'remember': true
    }
  });
}

App.Auth.signIn はドキュメントで明示的に使用されています: http://ember-auth.herokuapp.com/docs

于 2013-07-17T17:29:19.517 に答える
1

これは、コメントへの貼り付けがうまく機能しないため、@ heartsentwined の回答に基づいて機能したものを参照するためにここにあります。詳細については、コメントを参照してください。私のAPIはユーザーjsonを返すので、期待する形式で渡すだけです。

didCreate: function() {
  var user = App.Auth.get('_response').response.user;
  var auth = {auth_token: user.auth_token, id: user.id};
  App.Auth.get('_response').canonicalize(auth);
  App.Auth.trigger('signInSuccess');
}

更新: 私は ember-model に切り替え、呼び出したのと同じ場所model.save()( submitSignupController のアクション) でこれを行います。

var model = this.get('model'); 
model.on('didCreateRecord', function() { 
  var user = this.data;
  var auth = {auth_token: user.auth_token, user_id: user.id, remember_token: user.remember_token};
  App.Auth.get('_response').canonicalize(auth);
  App.Auth.trigger('signInSuccess');
}); 

model.save();
于 2013-06-06T03:53:16.357 に答える