在src/model/目录下新建一个wmapi_sys_cp.erl文件,model,controller,view等默认的文件夹boss会做特殊编译,如果要写自己的代码,一定要新建一个文件夹,自己编译,自己加载编译后的beam文件。wmapi_sys_cp.erl内容如下:
-module(wmapi_sys_cp, [Id, Type, Cid, Account, Password, LoginTimes, LoginLast, Note]).
-compile(export_all).
对于model/wmapi_sys_cp.erl这个文件,如果在服务启动前存在,boss就会检查在mnesia中是否存在wmapi_sys_cp这个表,如果没有,就会按照新建名为wmapi_sys_cp,字段为id,type,cid,account,password,login_times,login_last,note字段的表,如果表存在,就会忽略。如果在服务启动后新建的这个文件,先执行start-server.bat reload 命令编译加载新加的文件,再在终端手动创建表:mnesia:create_table(wmapi_sys_cp, [{disc_copies, [node()]}, {type, set}, {attributes, [id,type,cid,account,password,login_times,login_last,note]}]). 如果不确定字段名,执行wmapi_sys_cp:module_info().就可以查看了。
可以测试新加一条数据:
SysCp = wmapi_sys_cp:new(id, 10, 209, "mirahs", "wety252", 15, 111111111, "This is mirahs").
{wmapi_sys_cp,id,10,209,"mirahs","wety252",15,111111111,
"This is mirahs"}
SysCp:save().这样就加入一条数据了,用mnesia:info().查看一下表,有一条记录了
wmapi_sys_cp : with 1 records occupying 399 words of mem 这个表
_ids_ : with 1 records occupying 311 words of mem
schema : with 3 records occupying 656 words of mem
有了数据后,用这条数据做登陆并使用session(加数据可以自己做个注册的):
priv/wmadmin.routes内容如下:
{"/", [{controller, "admin"}, {action, "index"}]}.
src/controller/wmadmin_admin_controller.erl内容如下:
-module(wmadmin_admin_controller, [Req, SessionId]).
-compile(export_all).
index('GET', []) ->
case app_cp:login_is(SessionId) of
true ->
ok;
false ->
{redirect, [{action, "login"}]}
end.
login('GET', []) ->
ok;
login('POST', []) ->
UserName = Req:post_param("username"),
PassWord = Req:post_param("password"),
io:format("UserName: ~p~n", [UserName]),
io:format("PassWord: ~p~n", [PassWord]),
case boss_db:find(wmapi_sys_cp, [{account, UserName}, {password, PassWord}]) of
[{wmapi_sys_cp, _Id, _Type, Cid, _Account, _Password, _LoginTimes, _LoginLast, _Note}|_] ->
io:format("Cid: ~p~n", [Cid]),
Hash = app_cp:login_key_rule(integer_to_list(Cid),UserName,PassWord),
boss_session:set_session_data(SessionId, "session_cid", integer_to_list(Cid)),
boss_session:set_session_data(SessionId, "session_account", UserName),
boss_session:set_session_data(SessionId, "session_password", PassWord),
boss_session:set_session_data(SessionId, "session_hash", Hash),
{redirect, [{action, "index"}]};
_Ca ->
io:format("_Ca: ~p~n", [_Ca]),
{redirect, [{action, "login"}]}
end.
这里的app_cp模块我是在src目录下新建一个文件夹下面的,要手动编译和加载,内容如下:
-module(app_cp).
-compile(export_all).
login_is(SessionId) ->
Cid = boss_session:get_session_data(SessionId, "session_cid"),
Account = boss_session:get_session_data(SessionId, "session_account"),
Passwd = boss_session:get_session_data(SessionId, "session_password"),
SHash = boss_session:get_session_data(SessionId, "session_hash"),
Hash = login_key_rule(Cid, Account, Passwd),
SHash =:= Hash.
login_key_rule(Cid, Account, Passwd) when Cid =:= undefined; Account =:= undefined; Passwd =:= undefined ->
"";
login_key_rule(Cid, Account, Passwd) ->
io:format("Cid: ~p~n", [Cid]),
io:format("Account: ~p~n", [Account]),
io:format("Passwd: ~p~n", [Passwd]),
crypto:sha(Cid ++ Account ++ Passwd).
下面贴出html代码
src/view/base.html:
src/view/admin/login.html:
{% extends "base.html" %}
{% block title %}
WMAdmin Login
{% endblock %}
{% block body %}
{% endblock %}
src/view/index.html:
{% extends "base.html" %}
{% block title %}
WMAdmin Index
{% endblock %}
{% block body %}
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
{% endblock %}
完成之后可以在浏览器测试,session生存时间可以在boss.config文件配置,{session_exp_time, 10},为了测试我改成10秒了。
OK了!!!