找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 7543|回复: 28

[2021-3-27 技术分享] padavan 老毛子修改添加登录页面!!!!

[复制链接]
本帖最后由 花妆男 于 2021-3-27 10:26 编辑

效果如图:可以自己DIY  
修改步骤逻辑准备:
1. 主要修改登录逻辑就是把老毛子的http验证改为手动提交验证
2. 固件需要修改的文件也就只有一个:trunk/user/httpd/httpd.c 文件
3. 编写一个登录页面,放到 trunk/user/www 下面,(因为默认是拷贝这整个文件夹,无需关注makefile文件)
httpd.c  需要关注的重点
登录状态说明:
  1. /* 517 行
  2. * attempt login check, result
  3. * 0: can not login, has other loginer
  4. * 1: can login, this is localhost (always allow w/o auth)
  5. * 2: can login, no loginer
  6. * 3: can login, loginer is our
  7. */
  8. 0:   无法登录,有其他登录者
  9. 1:可以登录,这是本地主机
  10. 2:  可以登录,没有登录者
  11. 3:  可以登录,登录者是我们
复制代码
判断登录的逻辑
  1. /* 983 行*/
  2. if (handler->need_auth && login_state > 1 && !do_logout) {
  3.                 if (!auth_check(authorization)) {
  4.                         http_logout(&conn_ip);
  5.                         if (method_id == HTTP_METHOD_POST)
  6.                                 eat_post_data(conn_fp, clen);
  7.                         send_authenticate(conn_fp);
  8.                         return;
  9.                 }
  10.                
  11.                 if (login_state == 2)
  12.                         http_login(&conn_ip);
  13.         }
复制代码

返回调用http认证的函数
  1. /* 641 行 */
  2. static void
  3. send_authenticate( FILE *conn_fp )
  4. {
  5.         char header[128], *realm;
  6.         realm = nvram_safe_get("computer_name");
  7.         if (strlen(realm) < 1)
  8.                 realm = nvram_safe_get("productid");
  9.         snprintf(header, sizeof(header), "WWW-Authenticate: Basic realm="%s"", realm);
  10.         send_error( 401, "Unauthorized", header, "Authorization required.", conn_fp );
  11. }
复制代码

具体修改:
httpd.c
1. 修改登录逻辑,取消了状态 3 的验证,因为这样就可以减少很多的工作
2. 可以把 http 认证函数直接删了
  1. if (handler->need_auth && login_state > 1 && !do_logout) {
  2.                 /*
  3.                         没登录需要验证
  4.                 */
  5.                 if (login_state == 2){
  6.                         if(auth_check(authorization)){
  7.                                 http_login(&conn_ip);
  8.                                 send_headers( 200, "OK", NULL, NULL, NULL, conn_fp );
  9.                                 return;
  10.                         }else {
  11.                                 http_logout(&conn_ip);
  12.                                 if (method_id == HTTP_METHOD_POST)
  13.                                         eat_post_data(conn_fp, clen);
  14.                                 file = "Login.asp";
  15.                                 query = NULL;
  16.                         }
  17.                 }
复制代码

Login.asp (根据上面修改来命名的)
1. 核心就是用xhr head 提交一次验证
这个是把账号密码加密bease64(因为我们没有修改路由器的验证密码方式,所以这里拼接加密还是根据路由来,就是http的验证)
支持ie10+ 是因为 btoa 函数,需要兼容低版本可以手写加密函数或者其他
  1. function basicB64Encode(user,password) {
  2.         return 'Basic ' + btoa(encodeURIComponent(user.toString()+':'+password.toString()).replace(/%([0-9A-F]{2})/g,
  3.         function(match, p1) {
  4.               return String.fromCharCode('0x' + p1);
  5.         }));
  6.       }
复制代码
新建xhr对象,然后把认证参数通过 HEAD 方法提交给路由器
提交结束后在本地跳转到首页
  1. var req
  2. try{
  3.     if (window.XMLHttpRequest)
  4.        req=new XMLHttpRequest()
  5.     else
  6.        req=new ActiveXObject("Microsoft.XMLHTTP")
  7. }catch (e){
  8.      req=null
  9. }
  10. if (req != null){
  11.     req.open("HEAD","/",true)
  12.     req.setRequestHeader('Authorization',basicB64Encode(data.u,data.p))
  13.     req.onreadystatechange = function() {
  14.        if (req.readyState === 4){
  15.            window.location.href = "/"
  16.        }
  17.     }
  18.   req.send(null)
  19. }
复制代码
最后:
有啥问题不会的欢迎留言讨论!!!!
优点:修改地方少,简单,快速,比之前登录好看,而且不会出现手机上的一些问题
缺点:账号密码服务端错误不会提示,会直接再返回登录页
不会修改的可以直接下载附件替换编译就可以用了
附件:
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
 楼主| | 显示全部楼层
有啥问题可以留言,看到反馈
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
支持大佬,666
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

嘿嘿,这个可以有!!...
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

路过帮顶支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

看帖必回帖,楼主好人#^_^#
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

看看.试用下看实不实用
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

十分感谢分享

[2021-3-27 技术分享] padavan 老毛子修改添加登录页面!!!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
感谢分享!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

这个不错,赞一个
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

还要编译??有点麻烦,要是有直接替换文件就好了,用winscp进去替换
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

支持一下................
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

用winscp连接上了,根本找不到trunk/user/这个文件夹,整个文件夹搜索httpd.c也没有这个文件,请问这个文件夹在哪里?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

这也可以,路过帮顶支持
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

老毛子的固件目录是只读模式,不能写入,所以这个东西上传不进去
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-27 06:45

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表