0

私はそのようないくつかを書きました:

login('POST', []) ->
    ....
            case Client:check_password(Req:post_param("password")) of
                true ->
                    {redirect, [{controller, "chat"}, {action, "live"}], [{username, Name}, {gender, Gender}]};
    ....
    end.

チャットコントローラーのライブアクションに名前と性別の情報を受け取る方法は? 私が書いた:

live('GET', [Req]) ->
   Name=Req:post_param("username"),
   ....
   {ok, [{username, Name}, {gender, Gender}]}

しかし、それは機能しません。誰かが私を助けることができます>

4

1 に答える 1

0

リダイレクトで行っていることは、おそらく意図したものではありません。

コントローラー API のドキュメントを確認すると、2 番目の proplist がパラメーターではなく、要求ヘッダーを参照していることがわかります ( {redirect, Location, Headers::proplist()})。live/2これは、このように値にアクセスできることを意味しますReq:header("HEADERNAME")

次に、live/2コントローラー関数の定義では、URL パラメーター ( として参照) をキャプチャーしたと想定していますReqloginこれは、コントローラー関数のリダイレクトには反映されません。つまり、このように呼び出してから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()}]}.
于 2012-12-26T04:23:03.453 に答える