我正在使用带有yaws cookie会话的嵌入式YAWS网络服务器。 我首先使用用户名和用户对用户进行身份验证。密码允许他进入网页。
我的问题是,如果用户直接打开内部网页而不是登录页面,即使没有身份验证,他也可以查看它。如何限制用户必须拥有cookie才能查看任何内部网页。
答案 0 :(得分:4)
在chapter 7 of the Yaws PDF documentation中,有一个例子可以完全满足您的要求。它使用arg重写将未经身份验证的请求重定向到登录页面。
首先,我们在myapp
的服务器部分配置一个名为yaws.conf
的arg重写器模块:
arg_rewrite_mod = myapp
myapp:arg_rewrite/1
函数通过#arg{}
记录检查传入的请求以查找特定的cookie,如果找不到,请求不会尝试检索返回的三个资源中的一个在login_pages/0
函数中,它调用do_rewrite/1
来重写请求以提供login.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.
有关详细信息,请参阅Yaws PDF documentation。