Meteor で次の機能を構築したいと考えています。
ユーザーが Web サイトにアクセスすると、ログイン/サインアップ フォームだけが表示されます。クライアントにサーバーからの他の情報をまったく持たせたくありません。可能な限り単純なログイン/サインアップ フォームです。
ユーザーが正常にログインまたはサインアップした場合にのみ、クライアントにダウンロードされたすべてのテンプレートなどを含む完全なアプリが必要です。
Meteorでこれを達成することは可能ですか?
Meteor で次の機能を構築したいと考えています。
ユーザーが Web サイトにアクセスすると、ログイン/サインアップ フォームだけが表示されます。クライアントにサーバーからの他の情報をまったく持たせたくありません。可能な限り単純なログイン/サインアップ フォームです。
ユーザーが正常にログインまたはサインアップした場合にのみ、クライアントにダウンロードされたすべてのテンプレートなどを含む完全なアプリが必要です。
Meteorでこれを達成することは可能ですか?
いくつかのオプションがあると思います:
【ハード】流星単体アプリ
ノード要求処理パイプラインにフックし、残りの Meteor が関与する前にそこでインターセプトを行います。おそらく、server.js でこれを行うのが最も簡単です。Meteor コンストラクトを使用できません - 通常のノードと NPM パッケージを使用する必要がありますが、同じ MongoDB バックエンドにログイン トークンを書き込むことができます。
[より簡単] 2 つの Meteor アプリ
ログインのみを行い、トークンを同じ DB に書き込み、別の URL にリダイレクトする別の Meteor アプリを作成します。リバース プロキシを使用して、どのアプリがどの URL を処理するかを制御します。
[最も簡単] Meteor コアでのサーバー側レンダリングのサポートを待つ
2014年第2四半期の初めに来ると推測
これらをテストしていませんが、ログイン トークンが DB 上のユーザーのアカウントで終了し、ルート ドメインが同じである限り、これは機能すると思います。
==更新==
ログイン アプリに関しては、この大気パッケージは事前に作成されたログイン ページを提供します (IronRouter が必要です)。
== アップデート 2 ==
2 Meteor アプリ ソリューションは、より一般的な「アプリをさまざまな「領域」に分割したい」場合に適用できます。単純なログイン フォームの OP から尋ねられた特定のケースでは、最初のランディング ページに静的な HTML ページを使用するだけでよく、2 つ目の Meteor アプリについても心配する必要はありません。リバース プロキシは、次の 2 つのエンドポイント間でトラフィックをルーティングします。
Route53 や S3 バケットなどを使用すると、最初のランディング ページを CDN から直接提供することも可能だと思いますが、すべてを試したことはありません。
ログイン画面を提供し、次に完全なアプリを提供する最も簡単な方法は、おそらく静的なランディング ページを用意し、Meteor バックエンドと通信するように構成できる DDP クライアントであるAsteroid を使用してユーザーをログインさせることです。ログインが実行されると、Meteor アプリにリダイレクトされます。
var asteroid = new Asteroid("https://example.com/app:3000");
asteroid.loginWithTwitter();
多くの最新の SPA は、ログイン後にサブドメインにリダイレクトします。たとえば、Optmizely と Intercom はapp.(optimizely|intercom).com
ログイン後に にリダイレクトし、NewRelic は にリダイレクトしrpm.newrelic.com
ます。Optimizely は/
、「ログイン」の代わりにユーザー名を表示して表示すると、ログインしていることを認識しますが、NewRelic は気にせず、単に「ログイン」と表示します。ユーザーがアプリにログインしているかどうかを静的ページで把握するにはMeteor.loginTokenExpires
、localStorage のタイムスタンプを確認できます。ログインしているユーザーを自動的にリダイレクトしたい場合は、次のように記述できます。
if (Date.now() < Date.parse(window.localStorage.getItem('Meteor.loginTokenExpires'))) {
window.location.replace('https://example.com/app');
}
ただし、ドメインには注意してください。example.com
の localStorage にアクセスできませんapp.example.com
。また、これは、ログアウトしない限りランディング ページを再度表示できないことを意味します。
テンプレートでこれを行うことができます:
<body>
{{#if currentUser}}
{{> logged_in_template}}
{{else}}
{{> not_logged_in_template}}
{{/ if}}
</body>
currentUser は、ユーザーがログインしている場合にのみ使用できます。
{{currentUser}}
-ドキュメント: http://docs.meteor.com/#template_currentuser