4

Meteor で次の機能を構築したいと考えています。

  1. ユーザーが Web サイトにアクセスすると、ログイン/サインアップ フォームだけが表示されます。クライアントにサーバーからの他の情報をまったく持たせたくありません。可能な限り単純なログイン/サインアップ フォームです。

  2. ユーザーが正常にログインまたはサインアップした場合にのみ、クライアントにダウンロードされたすべてのテンプレートなどを含む完全なアプリが必要です。

Meteorでこれを達成することは可能ですか?

4

3 に答える 3

8

いくつかのオプションがあると思います:

  • 【ハード】流星単体アプリ

    ノード要求処理パイプラインにフックし、残りの 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 つのエンドポイント間でトラフィックをルーティングします。

  • 静的に提供されるランディング ページ (Nginx、Apache など)
  • 本当のMeteorアプリ

Route53 や S3 バケットなどを使用すると、最初のランディング ページを CDN から直接提供することも可能だと思いますが、すべてを試したことはありません。

于 2013-10-18T02:09:42.750 に答える
3

ログイン画面を提供し、次に完全なアプリを提供する最も簡単な方法は、おそらく静的なランディング ページを用意し、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。また、これは、ログアウトしない限りランディング ページを再度表示できないことを意味します。

于 2015-06-22T08:09:53.170 に答える
-3

テンプレートでこれを行うことができます:

<body>
   {{#if currentUser}}
     {{> logged_in_template}}
   {{else}}
     {{> not_logged_in_template}}
   {{/ if}}
</body>

currentUser は、ユーザーがログインしている場合にのみ使用できます。

{{currentUser}}-ドキュメント: http://docs.meteor.com/#template_currentuser

于 2013-10-17T17:34:29.020 に答える