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)自定義中間件(默認中間件的位置在 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!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM