使用thinkphp做一个用户登录功能是一个很简单的功能,最近公司的一个项目需要将thinkphp结合usbkey进行登录,(也就是需要插入usbkey进行登录,否则不放进行登录),开始的时候使用php+驱动(USB驱动)读取usbkey实现登录。在本地可以实现登录,上传到服务器上就不能登录(其原因就是php只能检测本地是否安装了usbkey的驱动,却不能检测其他客户端是否安装了驱动。)后来使用js来实现。这次可以实现登录。
实现的步骤:
1.安装USBKEY的驱动(本代码只使用飞天诚信USBKEY)
2.将USBKEY的HID(通过软件获取)放到数据库中。
3.利用js将usbkey的HID读取出来放到隐藏域中,通过from表单提交到后台,与数据库中的HID进行比对。相同就可以登录,不相同返回提示信息。
前台代码:
代码如下 | 复制代码 |
<form name="form1" id="form1" enctype="multipart/form-data" method="post" action="/Login/viplogin/" onsubmit="return v_login()"> <input type="hidden" name="hidd" value="" id="hidd"/> <input type="hidden" value="1" name="vip"/> <input class="yhtext" type="text" id="vuname" name="uname" placeholder="用户名" /> <input class="yhtext" type="password" id="vupwd" name="upwd" placeholder="密码" /> <input type="submit" value="登录" /> </form> <script> var R3; function Validate() { //判断是否插入U盾 var ret; R3 = document.getElementById("ROCKEY3"); R3.VendorID = "00000000"; //Find之前需要设置客户ID ret = R3.R3_Find(); if( ret != 0 ) { alert("请插入U盾"); return false; } // var open; R3.index = 1; //调用R3_Open接口之前需要,先设置index,表示打开第几把锁,从1开始 open = R3.R3_Open(); if( ret != 0 ) { alert("开锁失败"); return false; } //读取硬件ID var HID; HID = R3.R3_GetHardID(); if (HID != 0) { alert("读取HID失败"); //读出的硬件序列号在HardID中 return false; }else{ document.getElementById("hidd").value=R3.HardID; } } function v_login(){ |
后台代码:
基本逻辑就是前台传过来的username、usbkey的HID、pwd进行验证。
其实每个网站多有自己的业务逻辑,这种方法只是个参考。具体实现方法还有很多种。例如:讲用户密码写入到usbkey中,只有插入USBKEY才能获取密码进行登录。
或者写入一些特殊的字符进行验证。