欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Laravel 实现前后台用户分离登录

程序员文章站 2023-08-30 15:11:06
在很多时候,我们需要前台和后台进行不同的登录操作,以限制用户权限,现在用 Laravel 实现这个需求。 前戏 一、获取 Laravel 这个在文档中都有说明的,也比较简单,可以使用 composer 下载(我下载的时候是有些慢),我就复制之前下载好的空项目。 二、修改配置文件 在这一步我只修改了 ......

在很多时候,我们需要前台和后台进行不同的登录操作,以限制用户权限,现在用 laravel 实现这个需求。

前戏

一、获取 laravel

这个在文档中都有说明的,也比较简单,可以使用 composer 下载(我下载的时候是有些慢),我就复制之前下载好的空项目。

二、修改配置文件

在这一步我只修改了 .env 文件中的数据库配置。

三、运行项目

在项目根目录,运行

php artisan serve

Laravel 实现前后台用户分离登录

 

 在浏览器中输入 http://127.0.0.1:8000 访问自己的项目。

进入正题

有两种方式实现前后台用户的分离登录,使用两个数据表或者使用一个数据表。

一、使用两个表(前台用户表和后台用户表)

1、创建数据表

在项目根目录运行

php artisan make:migration create_users_table

执行上面的命令会在 database/migrations 目录下生成迁移文件 xxxx_create_users_table.php,这个文件在下载项目的时候是有的,可以直接修改,当然,多生成一个也没有关系吧。

修改 xxxx_create_users_table.php 文件(如果已经执行了上面的命令,修改的时候注意文件 xxxx 部分的日期,不要改错了)。

Laravel 实现前后台用户分离登录

 

 这里我多加了一个字段,用来判断用户是否允许登录。

在修改完成之后执行迁移。

php artisan migrate
Laravel 实现前后台用户分离登录

 

执行成功后,会在配置好的数据库中生成对应的表

Laravel 实现前后台用户分离登录

 

 users 表就是我们要用到的前台用户表,然后用同样的方法,生成一个后台用户表

运行
php artisan make:migration create_admins_table

修改 xxxxx_create_admins_table.php 中的内容

执行迁移:
php artisan:migrate

到这里,两个数据表就完成了。

2、实现基本的登录

运行 php artisan make:auth 命令
Laravel 实现前后台用户分离登录

 

 这时会看到 app 目录下多了 user.php。

在 app 目录下新建 models 目录,用来存放模型,将 user.php 移动到 models 目录。
修改 user.php 中的内容(可以不移动,省去好多操作)。
Laravel 实现前后台用户分离登录

 

 改为:

Laravel 实现前后台用户分离登录

 

 打开 config 文件夹下的 auth.php

Laravel 实现前后台用户分离登录
改为
Laravel 实现前后台用户分离登录

 

 然后打开 http/controllers 文件夹,里面多了一个 auth 文件夹,里面有我们注册登录使用的控制器。

打开 routes 文件夹下的 web.php 文件,修改
Laravel 实现前后台用户分离登录

 

 为:

Laravel 实现前后台用户分离登录

 

 这时刷新浏览器页面,会发现跳转到了登录界面,当然,目前用户表中没有添加任何数据,现在向用户表中添加数据:

运行
php artisan make:seeder userstableseeder
Laravel 实现前后台用户分离登录

 

运行成功之后,会在 database/seeds 目录下生成 userstableseeder.php 文件,打开这个文件,在 run 这个方法中添加下面的内容:

Laravel 实现前后台用户分离登录

 

 然后打开 databaseseeder.php,在里面添加:

Laravel 实现前后台用户分离登录

 

 完成编写之后,运行 composer dump-autoload

这时运行 php artisan db:seed
Laravel 实现前后台用户分离登录

 

 查看数据表:

Laravel 实现前后台用户分离登录

 

 刚才新建的用户已经存在了,这时进行登录,发现可以成功访问。

3、实现前台用户的稍复杂登录

我们在前面设置了 active 字段,用来验证用户是否允许登录,但是,目前 active 字段并没有进行验证,接下来就要验证 active 字段。
(1)修改 users 表中的 active 字段为 0。
(2)修改 vendor/laravel/framework/src/illuminate/auth/sessionguard.php 文件
Laravel 实现前后台用户分离登录

 

 和 attempt 方法中的:

Laravel 实现前后台用户分离登录

 

 (3)在 resources/lang 文件夹 en 文件夹中,打开 auth.php,在数组中添加:

'active' => 'this account is not allowed to login.'

(4)修改 blade 模板文件:

Laravel 实现前后台用户分离登录

 

 然后再次使用之前的账号密码登录,发现会提示错误信息:

Laravel 实现前后台用户分离登录

 

 4、实现后台用户登录(前后台分离登录)

出于安全考虑,后台用户不允许记住密码,因此的前台使用不同的登录界面。
由于是两个表实现,所以操作的数据库也不一样。
(1)添加后台用户,与添加前台用户相同,生成并运行 seeder
(2)添加 admin 模型(注意模型的继承和 trait 的使用)
(3)添加路由和控制器
Laravel 实现前后台用户分离登录

 

 并在控制器中添加 index 方法

Laravel 实现前后台用户分离登录

 

 在上面可以看到,我们使用的中间件还是 auth ,这就会和前台登录一样一样的了,可现在是后台登录呀。

(4)自定义中间件(默认中间件的位置在 app\http\middlewares)
php artisan make:middleware authadmin

修改内容为:

Laravel 实现前后台用户分离登录

 

 php artisan make:middleware guestadmin

修改内容为:

Laravel 实现前后台用户分离登录

 

 (5)打开 http 目录下的 kernel.php 文件,在 routemiddleware 中添加:

Laravel 实现前后台用户分离登录

 

 现在修改之前的路由:

Laravel 实现前后台用户分离登录

 

 现在如果直接访问 127.0.0.1:8000/admin 会提示 logincontroller 不存在,我们复制 auth 文件夹下的 logincontroller 到 controllers 目录,也可以新建。

修改里面的内容为:
Laravel 实现前后台用户分离登录

 

 新建视图文件 login.blade.php,复制 auth 文件夹下的 login.blade.php 到 当前视图文件,去掉 checkbox,修改提交地址为 route('admin.login'),保存。

然后。。。就 ok 了。

二、一个表实现(同一个表,使用字段进行区分)

在两个表实现的基础上,我们修改以下内容:
1、在 users 表中添加 type 字段(0 为前台用户,1 为后台用户)。
2、添加用户信息:
Laravel 实现前后台用户分离登录

 

 3、修改 route 文件

Laravel 实现前后台用户分离登录

 

 4、修改 logincontroller.php 文件

Laravel 实现前后台用户分离登录

 

 删除 guard 方法,添加 credentials 方法

Laravel 实现前后台用户分离登录

 

 目前来说已经基本实现了单表的前后台登录,但是现在是有 bug 的。

如果我在访问 localhost:8000 时登录了 user 用户,这时直接在浏览器地址栏中输入 localhost:8000/admin 也是可以访问到后台的,但是 user 用户是没有权限的,这样就出现了很大的安全隐患,我是这样想的,在中间件中多加一条判断,看用户是否有进入后台的权限,如果没有就返回前一页,有就可以访问。
Laravel 实现前后台用户分离登录

 

 在视图层中显示错误信息。

打开 layout/app.blade.php,在文件末尾处添加 javascript 代码:
Laravel 实现前后台用户分离登录

 

 

over!