リダイレクトで行っていることは、おそらく意図したものではありません。
コントローラー API のドキュメントを確認すると、2 番目の proplist がパラメーターではなく、要求ヘッダーを参照していることがわかります ( {redirect, Location, Headers::proplist()}
)。live/2
これは、このように値にアクセスできることを意味しますReq:header("HEADERNAME")
。
次に、live/2
コントローラー関数の定義では、URL パラメーター ( として参照) をキャプチャーしたと想定していますReq
。login
これは、コントローラー関数のリダイレクトには反映されません。つまり、このように呼び出してからlive/2
、リダイレクトを に変更する必要があります。live('GET', [Username, Gender])
/live/a-username/the-users-gender
{redirect, [{controller, "chat"}, {action, "live"}, {username, Name}, {gender, Gender}]}
ただし、代わりにセッションを使用することをお勧めします。コントローラーにメソッドを実装before_/1
し、モジュール定義に request パラメーターと session_id パラメーターの両方が含まれていることを確認します (ドキュメントを確認して ください)。これで、セッション API を使用してセッション関連の値を渡すことができます (これには、コントローラー関数をクリーンアップできるという利点もあります。3 番目のパラメーターを追加し、 結果に基づいて要求を区別するだけです)。before_/1
たとえば、次のようにすることができます。
live('GET', [], undefined) ->
% redirect to the login page
live('GET', [], UserObject) ->
{ok, [{username, UserObject:username()}, {gender, UserObject:gender()}]}.