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

前戏

一、获取 Laravel

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

二、修改配置文件

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

三、运行项目

在项目根目录,运行

php artisan serve

在浏览器中输入 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 部分的日期,不要改错了)。

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

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

php artisan migrate

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

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

运行
php artisan make:migration create_admins_table

修改 xxxxx_create_admins_table.php 中的内容

执行迁移:
php artisan:migrate

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

2、实现基本的登录

运行 php artisan make:auth 命令

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

在 app 目录下新建 Models 目录,用来存放模型,将 User.php 移动到 Models 目录。
修改 User.php 中的内容(可以不移动,省去好多操作)。

改为:

打开 config 文件夹下的 auth.php

改为

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

打开 routes 文件夹下的 web.php 文件,修改

为:

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

运行

php artisan make:seeder UsersTableSeeder

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

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

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

这时运行 php artisan db:seed

查看数据表:

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

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

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

和 attempt 方法中的:

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

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

(4)修改 blade 模板文件:

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

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

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

并在控制器中添加 index 方法

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

(4)自定义中间件(默认中间件的位置在 app\Http\Middlewares)
php artisan make:middleware AuthAdmin

修改内容为:

 php artisan make:middleware GuestAdmin

修改内容为:

(5)打开 Http 目录下的 Kernel.php 文件,在 routeMiddleware 中添加:

现在修改之前的路由:

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

修改里面的内容为:

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

然后。。。就 OK 了。

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

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

3、修改 route 文件

4、修改 LoginController.php 文件

删除 guard 方法,添加 credentials 方法

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

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

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

打开 layout/app.blade.php,在文件末尾处添加 JavaScript 代码:

OVER!

 

Laravel 实现前后台用户分离登录的更多相关文章

  1. YII2.O学习三 前后台用户数据表分离

    之前我们完成了Advanced 模板安装,也完成了安装adminlte 后台模板,这一步是针对前端和后台用户使用不同的数据库表来管理,做到前后台用户分离的效果: 复制一张user数据表并重命名为adm ...

  2. php的laravel框架快速集成微信登录

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_provider,详细的介绍请往下阅读. 本文面向的是php语言laravel框架的用户,介绍的是 ...

  3. 前后台彻底分离的核心文件bridge.js.

    具体代码可以在我的git上下载:https://github.com/guoyansi/bridge 这里的后台使用java写的,如果不了解java的童鞋可以忽略下面这样图片. bridge.js / ...

  4. laravel 的passport Oauth 认证登录请求 的 oauth_token 重置

    laravel 的passport Oauth 认证登录请求 的 oauth_token 重置    使用API登录认证是需要获取访问令牌,方法为: 参数: grant_type —— 密码模式固定为 ...

  5. (html)前端如何验证token的合法性来判断用户是否登录?

    问题: (html)前端如何验证token的合法性来判断用户是否登录?描述: 1.我使用了JWT的方式,后端生成了一个token,将其返回给前端,前端获取到后每次请求接口都附带上这个token,后端来 ...

  6. laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效

    laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效 php框架 laravel 2.1k 次浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键 ...

  7. beego 前后端分离登录验证

    conf>app.conf 文件添加一下参数 copyrequestbody=true sessionon =true routers>router.go 文件添加初始化路由 func i ...

  8. laravel如何实现多用户体系登录

    laraveli添加一个或多个用户表,以admin为例. 部分文件内容可能需要根据实际情况修改 创建一个Admin模型 php artisan make:model Admin -m 编写admins ...

  9. 七:Spring Security 前后端分离登录,非法请求直接返回 JSON

    Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...

随机推荐

  1. 图的遍历 | 1034 map处理输入数据,连通块判断

    这题写得比较痛苦.首先有点不在状态,其次题目比较难读懂. “Gang”成立的两个条件:①成员数大于两个  ②边权总和大于阈值K 首先,在录数据的时候通过map或者字符串哈希建立string到int的映 ...

  2. servlet中的doGet()与doPost()以及service()的用法

    doget和dopost的区别 get和post是http协议的两种方法,另外还有head, delete等 1.这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能 ...

  3. 【IntelliJ IDEA学习之三】IntelliJ IDEA常用快捷键

    版本:IntelliJIDEA2018.1.4 按场景列举一.打开设置CTRL + ALT + S:打开设置(File-->Settings...)Ctrl + Shift + Alt + S: ...

  4. 【2019年06月28日】A股最便宜的股票

    查看更多A股最便宜的股票:androidinvest.com/CNValueTop/ 经典价值三因子选股: 市盈率PE.市净率PB 和 股息分红率,按照 1:1:1的权重,选择前10大最便宜的股票. ...

  5. .net core + xunit 集成测试

    xunit地址:https://github.com/xunit/xunit 一.利用请求来测试接口,主要是测试webapi控制器方法 ①添加xunit项目 ,然后引用我们的主项目,nuget: Mi ...

  6. NeuCF源码中用到的模块(函数)

    论文:<Neural Collaborative Filtering>源码中用到的模块(函数) from keras.layers import Embedding, Input, Den ...

  7. Docker安装及简单使用(Ubuntu)

    ### Ubuntu18下docker安装 * step 1: 安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transpor ...

  8. angualr post 数据请求

    数据请求 post 新建一个服务 1. ng g service services /+服务名  eg:ng g service services/player 在此服务中进行设置 引入自带组件以及注 ...

  9. npm install 报错 error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,"d' 解决办法

    npm install 报错 : error Unexpected end of JSON input while parsing near '...sShrinkwrap":false,& ...

  10. 67 GC 垃圾回收机制

    GC是JVM中自带的一个线程 他会不定时来堆中回收那些不再使用的对象,以释放内存 可以通过System.gc()来主动建议jvm尽快调度gc来回收垃圾 不同的平台的jvm对GC的策略是有所不同的 我们 ...