Erlang 用户无需身份验证即可访问内部yaws页面

Erlang 用户无需身份验证即可访问内部yaws页面,erlang,yaws,Erlang,Yaws,我正在使用带有YAWS cookie会话的嵌入式YAWS web服务器。 我首先使用用户名和密码对用户进行身份验证,以允许他进入网页 我的问题是,如果用户直接打开内部网页而不是登录页面,即使没有身份验证,他也可以查看它。如何限制用户必须拥有cookie才能查看任何内部网页。中有一个示例正好满足您的要求。它使用arg重写将未经验证的请求重定向到登录页面 首先,我们在yaws.conf的服务器部分配置一个名为myapp的arg重写器模块: arg_rewrite_mod = myapp myapp

我正在使用带有YAWS cookie会话的嵌入式YAWS web服务器。 我首先使用用户名和密码对用户进行身份验证,以允许他进入网页

我的问题是,如果用户直接打开内部网页而不是登录页面,即使没有身份验证,他也可以查看它。如何限制用户必须拥有cookie才能查看任何内部网页。

中有一个示例正好满足您的要求。它使用arg重写将未经验证的请求重定向到登录页面

首先,我们在
yaws.conf
的服务器部分配置一个名为
myapp
的arg重写器模块:

arg_rewrite_mod = myapp
myapp:arg_rewrite/1
函数通过
#arg{}
记录检查传入的请求以查找特定的cookie,如果未找到并且请求未尝试检索从
登录页面/0
函数返回的三个资源之一,它调用
do_rewrite/1
来重写请求以传递
登录。yaws
页面:

arg_rewrite(Arg) ->
    OurCookieName = "myapp_sid"
    case check_cookie(Arg, OurCookieName) of
        {error, _} ->
            do_rewrite(Arg);
        {ok, _Session} ->
            %% return Arg untouched
            Arg
end.

%% these pages must be shippable without a good cookie
login_pages() ->
    ["/banner.gif", "/login.yaws", "/post_login.yaws"].

do_rewrite(Arg) ->
    Req = Arg#arg.req,
    {abs_path, Path} = Req#http_request.path,
    case lists:member(Path, login_pages()) of
        true ->
            Arg;
        false ->
            Arg#arg{req = Req#http_request{path = {abs_path, "/login.yaws"}},
                    state = Path}
end.
有关更多详细信息,请参阅。

中有一个示例,它完全符合您的要求。它使用arg重写将未经验证的请求重定向到登录页面

首先,我们在
yaws.conf
的服务器部分配置一个名为
myapp
的arg重写器模块:

arg_rewrite_mod = myapp
myapp:arg_rewrite/1
函数通过
#arg{}
记录检查传入的请求以查找特定的cookie,如果未找到并且请求未尝试检索从
登录页面/0
函数返回的三个资源之一,它调用
do_rewrite/1
来重写请求以传递
登录。yaws
页面:

arg_rewrite(Arg) ->
    OurCookieName = "myapp_sid"
    case check_cookie(Arg, OurCookieName) of
        {error, _} ->
            do_rewrite(Arg);
        {ok, _Session} ->
            %% return Arg untouched
            Arg
end.

%% these pages must be shippable without a good cookie
login_pages() ->
    ["/banner.gif", "/login.yaws", "/post_login.yaws"].

do_rewrite(Arg) ->
    Req = Arg#arg.req,
    {abs_path, Path} = Req#http_request.path,
    case lists:member(Path, login_pages()) of
        true ->
            Arg;
        false ->
            Arg#arg{req = Req#http_request{path = {abs_path, "/login.yaws"}},
                    state = Path}
end.
有关详细信息,请参阅。

:)我已经找到了相同的解决方案好友,但无论如何,谢谢:)我已经找到了相同的解决方案好友,但无论如何,谢谢:)