48

pre4 の新しいルーターで認証メカニズムを作成した経験のある人はいますか?

これまでの私の考えのいくつかは次のとおりです。

  • ビュー (Ember アプリ) をサーバー (Rails アプリ) から完全に分離するために、トークン認証を使用したいと考えています。RailsサーバーでDeviseを使用する可能性があります。
  • 現在のユーザーが存在するかどうか、およびそのユーザーに認証トークンが設定されているかどうかを確認できる、Ember アプリに相当する before_filter のようなものが必要です。
  • Rails サーバーは、すべての呼び出しで現在の認証トークンを返します。null 認証トークンが返された場合、Ember アプリはこれを検出し、認証されていない状態に移行して、ログイン ビューにリダイレクトする必要があります。

これには Ember ステート マシンを使用する必要があると思いますが、どうすればよいかわかりません。誰もこの問題にまだ取り組んでいませんか?

4

5 に答える 5

51

更新: @DustMason が回答で述べているように、認証のベスト プラクティスについては素晴らしいembercastsを確認してください。

ビュー (Ember アプリ) をサーバー (Rails アプリ) から完全に分離するために、トークン認証を使用したいと考えています。RailsサーバーでDeviseを使用する可能性があります。

理にかなっています。

現在のユーザーが存在するかどうか、およびそのユーザーに認証トークンが設定されているかどうかを確認できる、Ember アプリに相当する before_filter のようなものが必要です。

ルートにフックを追加できenterます。これは before_filter とほぼ同じです。しかし、認証トークンを確認するのに最適な場所かどうかはわかりません。

Rails サーバーは、すべての呼び出しで現在の認証トークンを返します。

理にかなっています。cookie-auth を使用し、呼び出して現在のユーザー プロファイルをフェッチします/api/meが、どちらも機能するはずです。

null 認証トークンが返された場合、Ember アプリはこれを検出し、認証されていない状態に移行して、ログイン ビューにリダイレクトする必要があります。

このアプローチの問題点は、(レールとは異なり) 特定の ember ルートへのアクセスを「保護」するのは容易ではないということです。そして、ユーザーはいつでも JS コンソールを開いて、好きな状態に入ることができます。したがって、「ユーザーは認証された場合にのみこの状態に入ることができる」と考える代わりに、「認証されていないユーザーが何らかの方法でこのルートに移動した場合」を検討してください。

これには Ember ステート マシンを使用する必要があると思いますが、どうすればよいかわかりません。誰もこの問題にまだ取り組んでいませんか?

認証の必要性は非常に単純なので、ステート マシンの必要性は見つかりませんでした。代わりにisAuthenticated、ApplicationController にプロパティがあります。このプロパティを使用してapplication.hbs、ユーザーが認証されていない場合にメイン ビューをログイン フォームに置き換えます。

{{if isAuthenticated}}
  {{render "topnav"}}
  {{outlet}}
{{else}}
  {{render "login"}}
{{/if}}

ApplicationRoute から、ユーザー プロファイルをフェッチします。

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    var profiles;
    profiles = App.Profile.find({ alias: 'me' });
    profiles.on("didLoad", function() {
      return profiles.resolve(profiles.get("firstObject"));
    });
    return profiles;
  }
});

次に、ApplicationController は、返されたプロファイルに基づいて isAuthenticated プロパティを計算します。

于 2013-02-01T19:27:31.000 に答える
12

最近、特注の認証システムからember-simple-authを使用するように変更しましたが、アプリとの統合が非常に簡単であることがわかりました。すべての OP 要件を満たし、リフレッシュ トークンのサポートも組み込まれています。

彼らは本当に素晴らしい API とすばらしいサンプル セットを持っています。トークンベースの認証に興味がある人は、ぜひチェックしてください。

于 2013-12-04T23:02:04.403 に答える
3

Josep のサンプルアプリは本当に素晴らしいです。彼のリポジトリのコピーを作成して、mongoid の代わりに ActiveRecord を使用してそれを行う方法を示し、Devise 確認可能モジュールも有効にしました。ここで見つけることができます。このレポは、フォークするのではなく、ゼロから再構築しました。これは、機能させるためにすべての手順を実行する必要があったためです。動作させるために必要な変更を加えたフォークを追加する場合は、この回答を更新します。

于 2013-04-24T13:31:53.897 に答える