04 | 后台登录:基于账号密码的登录方式(上)

article/2025/9/11 11:40:49

你好, 我是程序猿零壹。

在上一篇文章如何快速部署一个基于laravel框架开发的网站中,我们一起使用laravel框架快速部署了一个网站。但是目前网站上只有一个默认的页面,显得有点孤单寂寞冷,是时候要开始给网站添砖加瓦了。

在php项目开发中,绝大部分情况下,我们都是在实现能提供某种功能的后端服务。那么我们要开发的博客网站应该具备哪些功能或者服务呢?

博客网站,实际上是一个内容发布系统。管理员在网站后台对博文进行创建、编辑之后进行发布,用户就可以在网站前台进行浏览、评价等操作。

因此我们的网站的功能分为两部分,一是后台管理,包含的功能有登录功能、修改密码、博文管理、后台账号管理、重设密码、后台角色管理、后台权限管理、系统设置管理等功能;一是前台展示,包含的功能有博文分页、博文详情、博文分类、博文推荐、博文评价等功能。

那接下来,我们就来看看后台管理功能中的登录功能是如何实现的。

登录功能,用来验证某个用户是否具有访问系统的权限。如果验证通过,该用户就可以访问系统,从而可以创建、更新、删除系统的数据和资源。

常见的登录方式,如下:

  • 账号登录,是最简单的认证方式。用户提交用户名和密码到服务器进行认证,如果匹配则认证通过,登录成功。

  • 短信登录,后台账号需要绑定一个手机号,登录的时候提交手机号,由系统发出一条带随机码的短信给用户,用户收到短信后再提交给系统认证。如果手机号和随机码认证通过,用户就能访问系统。

  • 第三方登录,通过微信、支付宝、qq、github等第三方平台的账号授权来登录,跟手机一样,需要提前绑定账号。

在博客网站里,我们选择账号登录方式,也就是用户名+密码的方式来进行登录认证。

登录流程

用户在登录页面输入账号和密码,点击提交后通过ajax方式提交到服务器。服务器接受到登录请求,获取post参数到数据库里查询对应的记录,如果有查找到记录,就将用户输入的密码通过加密算法后与数据库里的数据进行匹配。如果匹配成功,则登录成功;如果匹配不成功,则返回对应的错误提示。

页面截图

前端代码

博客网站的后台前端样式,都是基于layui开发的。所以需要先下载layui。下载地址为:http://layui.winxapp.cn。下载后解压得到目录,如下图:

将layui目录整个复制到/public/static/admin目录下。

新建/public/static/admin/css/login.css,内容如下:

/*登陆表单样式 start*/
body{background: url("/static/admin/imgs/login-backend.jpg") no-repeat;background-size: cover;
}
.wrap{width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;position: fixed;
}
.login{width:440px;padding: 40px;background-color: #ffffff;border-radius: 4px;/* overflow-x: hidden; */box-sizing: border-box;align-self: center;
}
.login a.logo{display: block;height: 58px;width: 167px;margin: 0 auto 30px auto;background-size: 167px 42px;
}
.login .message {/*margin: 10px 0 0 -58px;*/padding: 18px 10px 18px 0;background: #09b4c5;position: relative;color: #fff;font-size: 24px;text-align: center;word-spacing:20px;
}
​
.login input[type=text],
.login input[type=file],
.login input[type=password],
.login input[type=email], select {border: 1px solid #DCDEE0;vertical-align: middle;border-radius: 3px;height: 50px;padding: 0px 16px;font-size: 14px;color: #555555;outline:none;width:100%;box-sizing: border-box;
}
.login input[type=text]:focus,
.login input[type=file]:focus,
.login input[type=password]:focus,
.login input[type=email]:focus, select:focus {border: 1px solid #27A9E3;
}
.login input[type=submit],
.login input[type=button]{display: inline-block;vertical-align: middle;padding: 12px 24px;margin: 0px;font-size: 18px;line-height: 24px;text-align: center;white-space: nowrap;cursor: pointer;color: #ffffff;background-color: #09b4c5;border-radius: 3px;border: none;-webkit-appearance: none;outline:none;width:100%;
}
.login hr {background: #fff 0 0 no-repeat;
}
.login hr.hr15 {height: 15px;border: none;margin: 0px;padding: 0px;width: 100%;
}
.login hr.hr20 {height: 20px;border: none;margin: 0px;padding: 0px;width: 100%;
}
/*登陆表单样式 end*/

下载jquery-1.8.3.min.js文件至/public/static/admin/js目录下。

下载md5.min.js文件至/public/static/admin/js目录下。

下载login-backend.jpg文件至/public/static/admin/imgs目录下。

以上3个文件的下载地址为:https://pan.baidu.com/s/18csudPMEew11Cd0XTy1H7g?pwd=blog

到此,前端文件准备完成,我们来查看下目录。

后端代码

新建app/Http/Controllers/Admin/BaseController.php,内容如下:

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
class BaseController extends Controller
{private $data = [];protected function assign($key, $value){$this->data[$key] = $value;}protected function view($page){$data = $this->data;return view($page, $data);}
}

新建app/Http/Controllers/Admin/AuthController.php,内容如下:

<?php
namespace App\Http\Controllers\Admin;
class AuthController extends BaseController
{public function login(){return $this->view('admin/auth/login');}
}

新建resources/views/admin/auth/login.blade.php,内容如下:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>登录-博客后台管理</title><link href="/static/admin/layui/css/layui.css" rel="stylesheet"><link href="/static/admin/css/login.css" rel="stylesheet"></head><body><div class="wrap"><div class="login"><div class="message">后 台 管 理</div><hr class="hr20">
​<form method="post" class="layui-form" ><input name="username" placeholder="账号" type="text" lay-verify="username" class="layui-input" autocomplete="off"><hr class="hr15"><input name="password" lay-verify="password" placeholder="密码"  type="password" class="layui-input"><hr class="hr15"><input value="登 录" lay-submit lay-filter="login" style="width:100%;" type="submit"><hr class="hr20" ></form></div></div></body>
</html>
<script src="/static/admin/js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="/static/admin/js/md5.min.js" type="text/javascript"></script>
<script src="/static/admin/layui/layui.js" type="text/javascript"></script>
​
<script>$(function  () {layui.use('form', function(){var form = layui.form;form.verify({'username':function(value){if(value.length < 1){return '请输入账号'}},'password':function(value){if(value.length < 1){return '请输入密码'}}});//监听提交form.on('submit(login)', function(data){let params = data.field || {};params.password = md5(params.password);params._token = "{{csrf_token()}}";$.ajax({url:'/admin/auth/login',data:params,type:"post",dataType:"json",success:function(result){let code = result.code||'';if(code !== 'success') {layer.msg(result.msg || "操作失败");return false;}window.location.href = '/admin';},error:function(error){console.log(error)}});return false;});});})
</script>

新建app/Http/Controllers/Admin/HomeController.php,内容如下:

<?php
namespace App\Http\Controllers\Admin;
class HomeController extends BaseController
{public function index(){return $this->view('admin/home/index');}
}

新建resources/views/admin/home/index.blade.php,内容如下:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>首页-博客后台管理</title><link href="/static/layui/css/layui.css" rel="stylesheet"></head><body><div class="wrap">欢迎回来,管理员。</div></body>
</html>
<script src="/static/js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="/static/layui/layui.js" type="text/javascript"></script>

修改routes/web.php,内容如下:

<?php
# 后台路由
Route::group(['prefix' => 'admin'
], function () {# 后台首页   访问路径:域名/adminRoute::get('/', 'Admin\HomeController@index');Route::group(['prefix' => 'auth'], function () {# 后台登录页   访问路径:域名/admin/auth/loginRoute::get('/login', 'Admin\AuthController@login');Route::post('/login', 'Admin\AuthController@loginPost');});
});

到此,我们就能通过在表单输入账号密码,通过 ajax向服务器提交信息了。

这里涉及到laravel框架的第一个知识点,路由。路由也就是可以访问的页面或者接口地址。

所有的laravel路由都在routes目录中的路由文件中定义。这些文件都会被框架自动加载。具体文档,可以访问laravel官网地址自行查看。

官网地址:https://laravel.com/docs

中文文档:https://learnku.com/laravel/docs

好了,今天我们就先到这里。下一篇,我们一起来看下如何接收、处理用户提交过来的参数,以及如何访问数据库进行数据查询做账号验证。

欢迎关注

最后,欢迎大家关注我的公众号呀 。打开微信搜索程序猿零壹公众号即可关注,希望能与大家共同进步。


http://chatgpt.dhexx.cn/article/7DrxZmjF.shtml

相关文章

Java用户账号和密码登录

package javaProject; import java.util.Scanner; public class test { private String []userBox {"jinxueHou","123456"};//数据库存储的账号和密码,private修饰&#xff0c;只能在本类中使用 public static void main(String[] args) { // T…

FTP服务器保存账号密码自动登录后如何退出并切换用户名登录其他账号(windows 10)

我们知道ftp传输文件方便&#xff0c;并且还可以设置账号密码登录。ftp登录时有复选框用于选择记住密码&#xff0c;在勾选之后每次登录就可以直接进入自己的账号的ftp了。本文提供退出已登录此账号&#xff0c;切换到其他账号的方法。     其实并不难&#xff0c;只需要在已…

Vue如何实现不同登录方式的切换(账号密码登录、邮箱验证登录等)

文章目录 前言一、使用vue开发框架的时候&#xff0c;无论是vue2或是vue3&#xff0c;都会运用到element ui组件库或是element-plus ui组件库&#xff0c;所以我们要解决的问题首先从这些组件库里来找寻答案二、项目里按需引入或者全局导入element ui组件库或是element-plus ui…

python实现账号密码登录

用Python实现账号密码登录 准备 无需数据库 程序简介 运行这个程序&#xff0c;注册后哪怕重新运行&#xff0c;注册的账号依然存在&#xff0c;我们可以把账号密码分别保存到2个txt中&#xff0c;使用的时候再读取txt 为了安全起见&#xff0c;我们可以对账号密码进行加密…

验证账号、密码登录

在商贸系统登录的时候,不需要验证码的验证,只需要验证账户和密码正确就可以进行登录,所以我们就只需要对账号和密码进行判断。这里写的登录逻辑很简单。 只做到了:当用户输入了账号和密码正确就可以登录进去,并没有完善到其它功能所以逻辑是容易理解而且清晰。给登录按钮…

(Html)实现一个账号密码登录的弹窗界面(代码)

一、代码段 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>账号密码弹窗</title> </head><body><label>账号</label><br><input id"user"><br><label>…

QT 记住账号密码登录

弄了个简单的记住账号密码登录功能&#xff0c;适合初学者学习&#xff0c;直接上代码&#xff0c;代码有注释。 喂饭到嘴边了&#xff0c;看你会不会吃啦 开发环境是VS2015 1、由于没有写注册功能&#xff0c;所以账号和密码我提前写在一个ini文件&#xff0c;这个文件直接手…

31、Java——JDBC实现账号密码登录

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;乐趣国学的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

基于Java的账号、密码登陆页面及验证

基于Java的登陆页面 需求功能 程序登录页面验证页面 后续 需求 我们在日常上网的过程中&#xff0c;常常会使用很多注册、登录我们的账号和密码的环节。这是网页开发中必不可少的一个环节。本文中将利用JavaTomcat完成一个简单的账号、密码登录的网页。 功能 首先&#xff0…

MATLAB中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()或im2double()将数据类型转换为浮点型

MATLAB中用imfilter()对图像进行相关或卷积运算前一定要用tofloat()将数据类型为float 为什么&#xff1f; 看一个实例的运行结果就知道了~ f imread(F:\material\images\P0020-Line-detection-01.tif); w [2 -1 -1;-1 2 -1;-1 -1 2]; g_tofloat imfilter(tofloat(f),w); …

matlab图像处理函数

1.1 读取和保存图像(其中Iimread(‘’)) 1.1.1 imtool() imtool&#xff08;I&#xff09;在图形中显示灰度图像I&#xff0c;I为矩阵&#xff0c;元素范围为0-255. imtool&#xff08;I&#xff0c;[low&#xff0c;high]&#xff09;小于等于low的为黑色&#xff0c;大于等于…

【Matlab】im2double的用法

im2double函数用于将图像转换为双精度。 语法形式有4种&#xff0c;分别是&#xff1a; I2 im2double(I); RGB2 im2double(RGB); I im2double(BW); X2 im2double(X, indexed); 描述&#xff1a; I2 im2double(I)将灰度图像I转换为双精度&#xff0c;必要时可以…

MATLAB图像处理,double 与im2double的用处与区别【学习笔记】

double只是将像素的灰度值从int8换为double&#xff0c;数值大小不变&#xff0c;125还是125.0。 im2double则附带了归一化操作&#xff0c;125变成了125/2550.490196078 double也不是毫无用处&#xff0c;在将一个256级的灰度图修改为4级时候就用这个&#xff0c;用im2double反…

信息论 | 计算离散信源的信息量和熵的MATLAB实现(函数封装调用)

《信息论基础》 实验报告 姓名 XX 班级 XXXXXX 学号 2020XXXXXXXX 实验项目 计算离散信源的熵 日期 2022.10.21 实验环境 联想电脑MATLAB R2018a版 实验内容与完成情况&#xff08;记录实验内容、操作步骤、实验结果等&#xff0c;包括系统输出的错误信息&#xff0c…

信息量,信息熵,纯度

如果看不懂博文&#xff0c;请阅读《信息论基础》一看便懂。 链接&#xff1a;https://pan.baidu.com/s/1T7rS4owM2nU_DP6rthqUPA 提取码&#xff1a;zu9s &#xff08;1&#xff09;消息 消息是实体&#xff0c;信息是抽象的。可以从消息中获取信息。消息的表现形式可以是…

基于GIS技术的地质灾害易发性评价—信息量模型

1.将上述步骤的所有图层和历史滑坡点导入arcgis,并使用多值提取至点的步骤,提取滑坡点属性值 2.转换工具—表转excel,得到多值提取至点的表格 3.打开各图层属性表提取每一分级的栅格像元,并计算信息量值。

自信息量,熵及其性质

一般地&#xff0c;如果一个随机事件有种等可能的结果&#xff0c;那么对其编码恰需要n位二进制数&#xff0c;即n比特来储存消息。 因此&#xff0c;可以把对所有可能消息的最小二进制编码位数近似着作该随机事件的熵&#xff0c;记为H。 对于上面的例子分别有 定义2.3 …

GIS与地质灾害评价——信息量的统计

GIS与地质灾害评价中一般都要进行信息量的统计&#xff0c;特别是地质灾害易发性评价的过程中&#xff0c;我们通常将某一因子分为几类&#xff0c;为了比较某一因子不同类别致灾的贡献率&#xff0c;我们通常都要进行信息量的统计。 下边我将某一区域的高程因子为例进行信息量…

数学期望、信息量、信息熵、相对熵、交叉熵

1、数学期望 数学期望就是总体的均值&#xff0c;或者各项的加权平均。 先看离散的情况&#xff0c;假设X为离散型随机变量&#xff0c;x1&#xff0c;x2&#xff0c;x3&#xff0c;……&#xff0c;xk为随机变量的所有可能取值&#xff0c;p1&#xff0c;p2&#xff0c;p3&a…

信息论:信息量的计算

香农定义&#xff0c;一个事件包含信息量的大小由这个事件消除了多少不确定性决定 计算得出的信息称为 Shannon information content 信息量在某些情况下是可加的&#xff0c;比如&#xff1a; 得知一个六面骰子投掷三次的结果所包含的信息量&#xff0c;是得知投掷一次的结果…