在很多時候,我們需要前台和后台進行不同的登錄操作,以限制用戶權限,現在用 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、實現基本的登錄
這時會看到 app 目錄下多了 User.php。
改為:
打開 config 文件夾下的 auth.php
然后打開 Http/Controllers 文件夾,里面多了一個 Auth 文件夾,里面有我們注冊登錄使用的控制器。
為:
這時刷新瀏覽器頁面,會發現跳轉到了登錄界面,當然,目前用戶表中沒有添加任何數據,現在向用戶表中添加數據:
php artisan make:seeder UsersTableSeeder
運行成功之后,會在 database/seeds 目錄下生成 UsersTableSeeder.php 文件,打開這個文件,在 run 這個方法中添加下面的內容:
然后打開 DatabaseSeeder.php,在里面添加:
完成編寫之后,運行 composer dump-autoload
查看數據表:
剛才新建的用戶已經存在了,這時進行登錄,發現可以成功訪問。
3、實現前台用戶的稍復雜登錄
和 attempt 方法中的:
(3)在 resources/lang 文件夾 en 文件夾中,打開 auth.php,在數組中添加:
'active' => 'This account is not allowed to login.'
(4)修改 blade 模板文件:
然后再次使用之前的賬號密碼登錄,發現會提示錯誤信息:
4、實現后台用戶登錄(前后台分離登錄)
並在控制器中添加 index 方法
在上面可以看到,我們使用的中間件還是 auth ,這就會和前台登錄一樣一樣的了,可現在是后台登錄呀。
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'),保存。
二、一個表實現(同一個表,使用字段進行區分)
3、修改 route 文件
4、修改 LoginController.php 文件
刪除 guard 方法,添加 credentials 方法
目前來說已經基本實現了單表的前后台登錄,但是現在是有 bug 的。
在視圖層中顯示錯誤信息。
OVER!
