0

I wrote some like that:

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

how to let the live action in chat controller receive the name and gender information? I wrote:

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

But it doesn't work, could anyone can help me>

4

1 回答 1

0

您在重定向中所做的很可能不是您想要的。

如果您查看控制器 API 文档,您会注意到第二个 proplist 指的是请求标头,而不是参数 ( {redirect, Location, Headers::proplist()})。这意味着您可以访问live/2like this中的值Req:header("HEADERNAME")

其次,在live/2控制器函数的定义中,您假设您已经捕获了一个 URL 参数(您将其引用为Req)。这不会反映在login控制器功能中的重定向中。所以你可以做的是改变你live/2to的定义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 来传递任何与会话相关的值(它还有一个好处是您可以清理控制器功能 - 添加第三个参数并简单地根据结果区分请求 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 回答