問題タブ [phoenix-live-view]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
elixir - 1 つの PubSub イベントに基づいてすべての Phoenix LiveView ソケットを更新する
いくつかの通知を購読している Phoenix LiveView アプリがあるとします。_header.html.eex
すべての LiveViewは、メニューやその他のものとともに、テンプレートを介してアイコンで新しい通知の数を表示します。
すべての LiveView で通知アイコンを最新の状態に保つには、PubSub にサブスクライブし、ソケット割り当てをリアルタイムで更新するメカニズムが必要です。
すべてのライブビューで同じものをカットアンドペーストすることなく、それらすべてをグローバルに更新する方法はありhandle_info
ますか?
authentication - 非ライブビュー ページにリダイレクトされた後、このライブビューが再びマウントされるのはなぜですか?
私は、主に と から新たに生成された Web アプリであるプロジェクトで作業していphx.new
ますphx.gen.auth
。ライブビューではないインデックス ページがあります。ログイン後、ユーザーはライブビューであるメイン ページにリダイレクトされます。
期待:生成されたLog out
リンクをクリックした後、ユーザーは/
、ライブビューではないインデックス ページにリダイレクトされる必要があります。この動作は、生成された認証によって指定されます。
経験:問題は、生成されたLog out
リンクをクリックすると、生成された認証が行うように書かれているように、ログアウトしたインデックス スプラッシュ ページにリダイレクトされるのではなく、代わりにログイン ページにリダイレクトされ、そこで 2 つのフラッシュが表示されることです。メッセージ::info
ログアウトの成功を示す 1 回のフラッシュと、:error
「このページにアクセスするにはログインする必要があります」という不平を言う 2 回目のフラッシュ。:error
ログイン ページでそのフラッシュをユーザーに見せたくありません。さらに悪いことに、事実は:error
フラッシュが表示される理由PageLive
は、インデックス ページに存在しないライブビューがそのmount/3
機能を再度 (3 回目) 実行しているためであり、これによりライブビュー認証が再度実行され、2 回目のリダイレクトが発生します。この問題が発生しますつまり、リダイレクトが正しく機能し、問題なくユーザーをインデックス ページに送信する場合もあれば、2 回目の冗長なリダイレクトと誤ったフラッシュ メッセージが表示される場合もあります。これはある種の競合状態を示していると思います。
これらのルートを使用して比較的新しく生成されたプロジェクトがあります(特に):
router.ex
認証は によって生成されましたphx.gen.auth
。生成されたdelete
アクションは、生成されたをUserSessionController
起動させますUserAuth.log_out_user/1
。
user_session_controller.ex
user_auth.ex
liveview docsで推奨されているように、ルーター内/dash
の liveview と呼ばれる liveview を介してルーティングします。PageLive
page_live.ex
user_live_auth.ex
ユーザーがログアウトをクリックした後のプロセスのログは次のとおりです。
上記のログで、302 リダイレクトが発生し、すぐにソケットが再接続してmount/3
実行され、今度は/users/log_in
ルートへの別のリダイレクトがトリガーされることに注目してください。私が理解している限り、ソケットはここで再接続を試みるべきではなく、何がこれを引き起こしているのかわかりません。
PageLive
ログアウト時に非ライブビュー ページへの 302 リダイレクトの後に再度マウントがトリガーされ、ログイン ページへの 2 回目のリダイレクトがトリガーされるのはなぜですか?