Android(2.3.x)の古いバージョンのweb/phonegapアプリケーションを構築しています。私がミックスにサーバーのリダイレクトを追加しようとするまで、すべてがうまく動作します。シナリオは次のとおりです。AngularJSを使用してサーバーからリダイレクトすると、Androidの無限リダイレクトループ
サーバー(node.js)には「/」をリスニングするルートがあります。このルートにヒットすると、セッションがあるかどうかを確認します。セッションがない場合は、/ loginにリダイレクトされます。この部分はうまく動作します(サーバーは賢明ですが、とにかく)。
問題は、クライアントがリダイレクトを取得したときに発生します。 Android 2.3はhistory.pushStateをサポートしていないので、hashbangsに戻ります。これはAngularJSがurlを/#!/ loginに書き換えてサーバーにセッションをチェックさせ、/ loginにリダイレクトするようにするサーバーリクエストを '/'に書き換え、AngularJSがURLを/#!/ログイン..など...無限に。
AngularJSでサーバからどのようにリダイレクトすることができますか?私のルートでこのロジックを処理する必要はありませんが、代わりにクライアントに実装しようとしますか?これを処理する方法がなければならないと確信していますが、わかりません。
ご協力いただければ幸いです。ありがとう!!
をチェック
{action: "redirect" url:"/login"}
を返し、
を私はあなたの説明に完全に従います:サーバーがリダイレクトを発行している場合は、AngularJSではなく、ブラウザで受信する必要があります。しかしおそらくxhr経由でサーバーからそのURLを取得していて、$ locationに割り当てることはできません。角度ドキュメントから: "$ロケーションサービスではURLだけを変更できますが、ページをリロードしてください。URLを変更してページをリロードするか、別のページに移動する必要がある場合は、より低いレベルのAPI、$ window.location.hrefを使用してください。あるいは、 '/ login#!/ login'にリダイレクトする必要がありますか? – Piran
私は何が起こっているのかを正確に示したいと思いますが、Angularはサーバーのリダイレクトを「ハイジャック」しています。サーバーは/ loginとangleにリダイレクトして、これを/#!/ loginと書き換えます。これにより、サーバーは「ログインしていないのでログインにリダイレクトします」というメッセージを表示します。サーバーは/と経路を取得します(これはAngularがそれを書き換えるためです)。 –