web-dev-qa-db-ja.com

Ember認証のベストプラクティス?

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

これまでの私の考えのいくつかを以下に示します。

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

このためにEmberステートマシンを使用する必要があると思われますが、どうすればよいかわかりません。

48
Sean Rucker

更新:@DustMasonが答えで言っているように、認証のベストプラクティスについて、素晴らしい embercasts をチェックしてください。

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

理にかなっています。

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

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

Railsサーバーは、呼び出しごとに現在の認証トークンを返します。

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

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

このアプローチに関することは、(Railsとは異なり)特定のemberルートへのアクセスを「保護」することは簡単ではないということです。したがって、「ユーザーは認証された場合にのみこの状態になることができる」と考える代わりに、「認証されていないユーザーが何らかの方法でこのルートにナビゲートした場合」

このためにEmberステートマシンを使用する必要があると思われますが、どうすればよいかわかりません。

認証のニーズは非常に単純なので、ステートマシンの必要性は見つかりませんでした。代わりに、ApplicationControllerにisAuthenticatedプロパティがあります。ユーザーが認証されていない場合、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プロパティを計算します。

51
Mike Grassotti

そのために ember-auth を使用することをお勧めします。必要なすべての機能を実装し、私の意見では非常にうまく機能します。

また、 デモとチュートリアル があり、Devise on Rails同じ著者による。

また、基本的なEmber Deviseトークン認証を使用したEmber-authに基づくアプリケーションと、Oauthを見つけることができるGoogleおよびLinkedInの場合は here そしてここにあります: https://starter-app.herokuapp.com

19
joscas

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

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

12
Martin Stannard

新しくリリースされたEmber非同期ルーターは、私の意見ではニース認証フローのセットアップを容易にします! http:// www。 embercasts.com/ 良い例

4
Jordan Sitkin

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

3
jhosteny