在很多時候,我們需要前台和后台進行不同的登錄操作,以限制用戶權限,現在用 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!