10

サーバーにはNode+Express + Passport、クライアントにはjQuery+Backbone.jsのアプリがあります。クライアントはURLでハッシュタグを使用しますが、一部の機能では、ユーザーがログインすることが重要です。

URLを介してアプリにアクセスできるようにしたいのですが、たとえばhttp://mydomain.com/app#cone/waffle/flavor/mint/toppings/sprinkles次のようになります。

  • ユーザーがすでにログインしている場合は、面倒なことなく、要求されたURLに直接アクセスします
  • ユーザーがまだログインしていない場合は/login、要求されたURLに移動してから移動します

このSOの投稿、 Node.js PassportのGoogle戦略に関するカスタムreturnUrlに続いて、私はそれを持っています

  • すでにログインしている場合は、URL、ハッシュタグ、その他すべてに直接アクセスします
  • ログに記録されていない場合は、ログインページに移動し、次に要求されたURLに移動しますが、...

ログイン後のリダイレクトで、元のURLからハッシュパラメータが削除されているようです。

元の宛先にリダイレクトするときにハッシュパラメーターを保持する方法はありますか?

この投稿から、リクエストURLからハッシュパラメーターを取得するハッシュタグがサーバーで利用できないという考えがわかりました。これがハッシュタグを使用するポイントです。

だから私はそれが不可能だと思います。たぶん、パラメータをローカルにキャッシュして、リダイレクト時に取得します[original URL minus hastags] + #use-cached-params

4

2 に答える 2

9

ハッシュパラメータはブラウザのみであり、サーバーには送信されません。ただし、この手法は、リダイレクト、ハッシュタグ、およびすべてに使用できます。

  • GET / some / page#with / hash
  • ログインしましたか?次に、ページをレンダリングします
  • ログインしていない?JavaScriptが含まれているページをレンダリングします。たとえば、「getHash.jade」と言います。
  • getHash.jade:完全なURLをコピーしてから、「/ login&redirect=」+originalURLにリダイレクトします
  • GET / login(これで、サーバーにハッシュを保存して、そこから取得できます)
于 2013-03-10T03:48:10.450 に答える
1

アンカーリンクをもう少し詳しくキャプチャする方法は次のとおりです。すべてのWebフレームワークで機能します。

シナリオ例を使用して説明します。ログイン後にディープURLにリダイレクトできるように、認証されていないユーザーから要求されたディープURL http://server.com /#/xyzをキャプチャする必要があるとします。

  1. 認証されていないユーザーがhttp://server.com/#/xyzを要求します(「 」以降はすべてサーバーに送信されません)。

  2. サーバーが知っているのは、ユーザーがhttp://server.com/を望んでいることと、認証されていないことだけです。サーバーはユーザーをログインフォームにリダイレクトします。

  3. 賢い点は次のとおりです。クライアントはまだ元のリクエストを待機しているため、サーバーがwindow.location.hrefを参照するJSを含むログインフォームに非表示の要素を含めると、元のリクエストの完全なURLをキャプチャできます。アンカー部分:

    <form action="/login" method="post">
      <div>
        <label>Username:</label>
        <input type="text" name="username"/><br/>
      </div>
      <div>
        <label>Password:</label>
        <input type="password" name="password"/>
      </div>
      <!-- XXXXXXXXX CLEVER BIT XXXXXXXXXX-->
      <script>
        document.write('<input type="hidden" name="from" value="'+document.location.href+'"/>');
      </script>
      <!-- XXXXXXXXXX-->
      <div>
        <input class="submit-button" type="submit" value="Submit"/>
      </div>
    </form>
    
  4. ユーザーが自分自身を認証すると、元のURLがPOSTとともに送信されます。その後、サーバーはユーザーを元のディープURLに中継できます。

于 2015-03-01T02:20:21.753 に答える