2013-10-16 15 views
6

私は、レール、devise、およびcookieベースのセッションを使用してEmber.jsアプリ認証で3つの目標を達成しようとしています。彼らはログインしていない場合#/sessions/newにリダイレクトEmber.js RailsとのセッションCookieベースの認証

  1. 常にアプリケーションテンプレートでは、現在のユーザーの情報を表示します。
  2. ユーザーがログインしている場合は、#/some/routeに直接アクセスします。現在のユーザーは、ロード時にロードする必要があります。 Client-side Authentication Part 1 & Client-side Authentication Part 2

は、私はこれらのembercastビデオを見てきました。彼らは少し時代遅れだが役に立つ。

しかし、まだ完全な解決策ではありません。誰でも完全なRails 4、Devise、Emberjs 1.0.0の例がありますか?

最大の問題は、現在のユーザーをページの読み込みに読み込んで、サインインフォームが送信されたときに現在のユーザーを設定することです。私は、これはなんとかではないと言うではないでしょう


App.User = Em.Object.extend(); 

App.User.reopenClass({ 
    current: function() { 
    return Ember.$.getJSON("https://stackoverflow.com/users/current").then(function(data) { 
     return data 
    }) 
    } 
}); 

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
    return App.User.current(); 
    } 
}); 

App.SessionsNewController = Ember.ObjectController.extend({ 

    actions: { 
    save: function(data) { 
     var self = this, data = this.getProperties('email', 'password'); 

     $.post("/sessions", { session: data }).always(function(response, status, data) { 
     if (status == "success") { 
      self.transitionToRoute('index'); 
     } else { 
      self.set('errorMessage', data); 
     } 
     }) 

    }, 
    } 

}); 

答えて

8

は、今のところこれが私の戦略です。しかし、あなたは、認証を働かせるために余計な不必要な作業をたくさん行うでしょう。すべて簡単なページリダイレクトで行うことができます。

私は、Backbone.Marionetteの著者Derickから意見を集めました。 Ember.jsではなくBackbone用ですが、クライアントサイド認証の状況は同じです。

私はBackbone/Marionetteに認証されたサイトの内容の再読み込みを処理させてもらうことは苦労し、不必要であることがわかります。ユーザーがログインすると、サーバーが処理する別のURLにそれらをリダイレクトし、サーバーが認証されたユーザーとして必要なものをすべて送信するようにします。 https://stackoverflow.com/a/18151935

同様Derickから別の引用:

右。そして、私が一言で言えば、「単一ページアプリケーションをしないでください」と言うケースがたくさんあります。そして、ログイン画面がその最大の例です。ここ数年のうちに私が持っていたクライアントのすべてで、彼らは皆私にこう尋ねました。「ねえ、私はこの問題を抱えています。私はログイン画面を取得して、サーバから現在のユーザ情報を返し、すべてをリフレッシュせずに画面上にすべての情報をやり直そうとしています。 "私の答えは毎回「しないでください」です。http://javascriptjabber.com/056-jsj-marionette-js-with-derick-bailey/

また、他の例を考えるには、Gmailに言う。あなたがクリックした後、スムーズな移行を得ることはありません。ページでGmailの看板上のボタンを「サインイン」だけでなく、むしろビッグデータの読み込みではありリダイレクトされます:)

ユーザーの観点から見ると、サインインした後にリダイレクトがあるだけでGmailがうまくいかないとは言いません。すべての署名/サインアップが毎日のメール操作よりもはるかに少ないです。

私の提案は、ユーザーセッションの変更後にすべてのリソースを再読み込みすることです。 RailsとDeviseが伝統的な方法でこれらの汚い仕事をしましょう。

関連する問題