zoukankan      html  css  js  c++  java
  • Laravel 实现前后台用户分离登录

    在很多时候,我们需要前台和后台进行不同的登录操作,以限制用户权限,现在用 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)自定义中间件(默认中间件的位置在 appHttpMiddlewares)
    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!

     
  • 相关阅读:
    Chrome 已经原生支持截图功能,还可以给节点截图!
    【promise| async/await】代码的控制力
    移动端各种分辨率手机屏幕----适配方法集锦
    Web Storage事件无法触发
    【php学习】图片处理三步走
    NYOJ 36 LCS(最长公共子序列)
    NYOJ 252 01串 普通dp
    NYOJ 18 The Triangle 填表法,普通dp
    NYOJ-171 聪明的kk 填表法 普通dp
    NYOJ17 最长单调递增子序列 线性dp
  • 原文地址:https://www.cnblogs.com/Super-Lee/p/11767931.html
Copyright © 2011-2022 走看看