我决定使用基于YAWS的Web界面对我的系统进行升级,运行Erlang。我已经重新编译了Erlang部分,并测试了Web部件,我在YAWS处理的登录过程中遇到了错误。
特别是,我在嵌入模式下使用YAWS,配置为:
#sconf{listen = Ip,
servername = HostName,
port = get_port(),
docroot = get_docroot(),
errormod_404 = ?MODULE,
partial_post_size = 1000000,
authdirs = [#auth {dir = ["/"], realm = Realm, type="Basic", users = [{User, Pwd}]}]}
get_port()和get_docroot()是正确的,值来自配置文件,作为User和Pwd值。
当我连接到网络界面时,浏览器会显示登录表单,所以我插入了正确的帐户,但当我确认发生了什么时:
Yaws process died: {function_clause,
[{yaws_server,'-handle_auth/4-fun-1-',
[{"admin","admin"}],
[{file,"yaws_server.erl"},{line,2175}]},
{lists,any,2,[{file,"lists.erl"},{line,1225}]},
{yaws_server,handle_auth,4,
[{file,"yaws_server.erl"},{line,2178}]},
{yaws_server,is_auth,5,
[{file,"yaws_server.erl"},{line,2045}]},
{yaws_server,is_req_auth,3,
[{file,"yaws_server.erl"},{line,2032}]},
{yaws_server,handle_normal_request,5,
[{file,"yaws_server.erl"},{line,1932}]},
{yaws_server,aloop,4,
[{file,"yaws_server.erl"},{line,1242}]},
{yaws_server,acceptor0,2,
[{file,"yaws_server.erl"},{line,1065}]}]}
并且登录失败。
我在YAWS文档中寻找了解决方案但是我找到了任何东西,似乎我的配置是正确的(它与以前的YAWS版本没有问题的情况相同)。
提前感谢您的帮助。
利玛
答案 0 :(得分:1)
新版本要求users字段是4元组的列表,而不是2元组。 (这就是为什么乐趣在文件" yaws_server.erl",第2175行崩溃的原因。)
答案 1 :(得分:1)
谢谢你的回答,理查德。
我已经阅读了代码(yaws_server.erl)以及关于crypto:hash函数的Erlang文档,所以最后我发现了问题:
就我而言,用户列表的正确配置是
#sconf{listen = Ip,
servername = HostName,
port = get_port(),
docroot = get_docroot(),
errormod_404 = ?MODULE,
partial_post_size = 1000000,
authdirs = [#auth {dir = ["/"], realm = Realm, type="Basic", users = [{User, md4, Salt, crypto:hash(md4, [Salt,Pwd])}]}
在第二步中,我将删除带有散列值的明文Pwd。
非常感谢。