Laravel 實現前後臺用戶分離登錄

来源:https://www.cnblogs.com/Super-Lee/archive/2019/10/30/11767931.html
-Advertisement-
Play Games

在很多時候,我們需要前臺和後臺進行不同的登錄操作,以限制用戶許可權,現在用 Laravel 實現這個需求。 前戲 一、獲取 Laravel 這個在文檔中都有說明的,也比較簡單,可以使用 composer 下載(我下載的時候是有些慢),我就複製之前下載好的空項目。 二、修改配置文件 在這一步我只修改了 ...


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

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Spring IOC IOC技術: 控制反轉,也叫(依賴註入) 控制反轉:Bean的生命周期不受你控制,而是交給Spring容器管理。 Spring框架如何利用IOC ?: 實現了控制反轉,Spring容器能幫我們實例化對象,但是並沒有做到DI(依賴註入)。 作用: (1) 構建Bean (2) ...
  • 異常類型(異常就是報錯) 常見異常 NameError:名稱錯誤 SyntaxError:語法錯誤 TypeError:類型錯誤 錯誤回溯 查看報錯原因、報錯的行,以及執行的代碼 通過錯誤回溯,可以直接查看到這些內容 異常本身是類(基於繼承) 在 Python 中所有的異常都是繼承自 BaseExc ...
  • 1、New->Project 2、點擊next 3、在Group欄輸入組織名,Artifact就是項目名。其它選擇預設就好,直接Next 4、添加依賴 5、修改您希望放項目的位置,點擊finish,等待idea下載springboot項目模板和相關的依賴 項目構建完成後的目錄結構 6、如果需要用my ...
  • 眾所周知,我們可以通過索引值(或稱下標)來查找序列類型(如字元串、列表、元組...)中的單個元素,那麼,如果要獲取一個索引區間的元素該怎麼辦呢? 切片(slice)就是一種截取索引片段的技術,藉助切片技術,我們可以十分靈活地處理序列類型的對象。通常來說,切片的作用就是截取序列對象,然而,它還有一些使 ...
  • (1)、首先在app\Http\routes.php中定義路由; 1 2 3 Route::get('view','ViewController@view'); Route::get('article','ViewController@article'); Route::get('layout',' ...
  • 一、初識 瞭解TCP協議瞭解C/S結構程式設計Python socket模塊的使用Python subprocess模塊的使用 二、理論基礎 以下內容整理自百度百科,參考鏈接: TCP(傳輸控制協議)2.1 C/S結構程式設計 C/S 結構,即大家熟知的客戶機和伺服器結構。它是軟體系統體繫結構,通過 ...
  • 打算在過年前每天總結一個知識點,所以把自己總結的知識點分享出來,中間參考了網路上很多大神的總結,但是發佈時候因為時間太久可能沒有找到原文鏈接,如果侵權請聯繫我刪除 20191030:閉包 首先一個函數,如果函數名後緊跟一對括弧,相當於現在我就要調用這個函數,如果不跟括弧,相當於只是一個函數的名字,里 ...
  • 學java時和同學碰到的一道題: 轉自https://blog.csdn.net/qq_40857349/article/details/102809100 某公司組織年會,會議入場時有兩個入口,在入場時每位員工都能獲取一張雙色球彩票,假設公司有100個員工,利用多線程模擬年會入場過程, 並分別統計 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...