Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48371
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 92
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-27 19:21
文章分类

全部博文(9)

文章存档

2014年(9)

我的朋友

分类: Erlang

2014-09-11 16:03:42

前提:配置好数据库和session

在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:


 
  {% block title %}This is base.html title!!!{% endblock %}
  
  
  
 
 
  {% block body %}
  This is base.html body!!!
  {% endblock %}
  
  
 


src/view/admin/login.html:

{% extends "base.html" %}

{% block title %}
WMAdmin Login
{% endblock %}

{% block body %}


 

  

   
   
   

    
   

  

  

   
   
   

    
   

  

  

   
   
   

    
   

  

  

   
   
   

5次登录失败,封帐号或IP


  

  

   
   

    
   

  

 

 

{% 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了!!!

阅读(2241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~