Pre4の新しいルーターで認証メカニズムを作成した経験はありますか?
これまでの私の考えのいくつかを以下に示します。
このためにEmberステートマシンを使用する必要があると思われますが、どうすればよいかわかりません。
更新:@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プロパティを計算します。
そのために ember-auth を使用することをお勧めします。必要なすべての機能を実装し、私の意見では非常にうまく機能します。
また、 デモとチュートリアル があり、Devise on Rails同じ著者による。
また、基本的なEmber Deviseトークン認証を使用したEmber-authに基づくアプリケーションと、Oauthを見つけることができるGoogleおよびLinkedInの場合は here そしてここにあります: https://starter-app.herokuapp.com
私は最近、オーダーメイドの認証システムから ember-simple-auth を使用するように変更し、アプリとの統合が非常に簡単であることに気付きました。 OPのすべての要件を満たし、リフレッシュトークンのサポートも組み込まれています。
彼らは本当に素敵なAPIと素晴らしいサンプルセットを持っています。トークンベースの認証に興味がある人は誰でもチェックしてください。
新しくリリースされたEmber非同期ルーターは、私の意見ではニース認証フローのセットアップを容易にします! http:// www。 embercasts.com/ 良い例