摘要:防止前臺用戶注銷的時候清除后臺用戶的。框架自帶用戶認證在注銷時會清空所有重寫前臺注銷操作至此,后臺用戶登錄全部完成。
準備工作:
1、下載laravel框架
2、配置好項目(數據庫連接以及虛擬主機)
開始:
前臺用戶認證laravel已經為我們寫好了,此部分可參考官方文檔
創建模型(以adminstrator為例)
php artisan make:model Models/Adminstrator -m
編寫administrator表遷移
Schema::create("administrators", function (Blueprint $table) { $table->engine = "InnoDB"; $table->increments("id"); $table->string("login_name")->unique(); $table->string("display_name")->nullable(); $table->string("password"); $table->string("avatar")->nullable(); $table->rememberToken(); $table->tinyInteger("status")->default(1); $table->timestamps(); });
編寫administrator模型
創建后臺配置文件admin.php,在return數組中寫入
"auth" => [ "guards" => [ "administrator" => [ "driver" => "session", "provider" => "administrators", ], ], "providers" => [ "administrators" => [ "driver" => "eloquent", "model" => AppModelsAdministrator::class, ], ], ],創建后臺用戶認證中間件Authenticate,運行:
php artisan make:middleware Admin/Authenticate修改handle方法:
guest() && !$this->shouldPassThrough($request)) { return redirect()->guest(admin_base_path("login")); } return $next($request); } /** * Determine if the request has a URI that should pass through verification. * * @param IlluminateHttpRequest $request * * @return bool */ protected function shouldPassThrough($request) { $excepts = [ admin_base_path("login"), admin_base_path("logout"), ]; foreach ($excepts as $except) { if ($except !== "/") { $except = trim($except, "/"); } if ($request->is($except)) { return true; } } return false; } }創建AdminServiceProvider,運行:
php artisan make:provider AdminServiceProvider編寫:
AppHttpMiddlewareAdminAuthenticate::class, "admin.pjax" => SpatiePjaxMiddlewareFilterIfPjax::class, "admin.log" => AppHttpMiddlewareAdminLogOperation::class, ]; /** * 中間件組 * @var array */ protected $middlewareGroups = [ "admin" => [ "admin.auth", "admin.pjax", "admin.log", ], ]; /** * Bootstrap services. * * @return void */ public function boot() { if (file_exists($routes = base_path("routes/admin.php"))) { $this->loadRoutesFrom($routes); } } /** * Register services. * * @return void */ public function register() { $this->loadAdminAuthConfig(); $this->registerRouteMiddleWare(); } /** * 注冊路由中間件 */ public function registerRouteMiddleWare() { // 注冊路由中間件 foreach ($this->routeMiddleware as $key => $middleware) { app("router")->aliasMiddleware($key, $middleware); } // 注冊路由中間件組 foreach ($this->middlewareGroups as $key => $middleware) { app("router")->middlewareGroup($key, $middleware); } } /** * Setup auth configuration. * * @return void */ protected function loadAdminAuthConfig() { config(array_dot(config("admin.auth", []), "auth.")); } }在config/app.php中注冊provider和facades
"providers" => [ ..., AppProvidersAdminServiceProvider::class, ] "aliases" => [ ..., "Admin" => AppFacadesAdminAdmin::class, ]創建登錄表單驗證類,運行:
php artisan make:request AdministratorLoginRequest重寫其父類rules及messages方法:
"required", "password" => ["required", "min:6"] //密碼必須,最小長度為6 ]; } public function messages() { return [ "login_name.required" => "請輸入用戶名", "password.required" => "請輸入密碼", "password.min" => "密碼至少6位", ]; } }創建登錄控制器,運行:
php artisan make:controller Admin/Auth/LoginController編寫登錄方法:
guest()) { return redirect(config("admin.route.prefix")); } return view(admin_view_base_path("auth.login.index")); } /** * 登錄操作 * @param AdministratorLoginRequest $loginRequest * @return IlluminateHttpRedirectResponse|IlluminateRoutingRedirector */ public function postLogin(AdministratorLoginRequest $loginRequest) { $postData = $loginRequest->only("login_name", "password", "remember"); $result = Auth::guard("administrator")->attempt($postData, $loginRequest->filled("remember")); if ($result) { admin_toast("登錄成功"); $loginRequest->session()->regenerate(); return redirect()->intended(config("admin.route.prefix")); }else{ return redirect()->back()->withInput() ->withErrors([ "login_name" => "用戶名或密碼錯誤" ]); } } /** * 注銷登錄 * @return IlluminateHttpRedirectResponse|IlluminateRoutingRedirector */ public function postLogout() { Auth::guard("administrator")->logout(); session()->forget("url.intented"); return redirect(config("admin.route.prefix")); } }至此,認證業務已經完成,接下來進行完善,使系統能夠跑起來
創建視圖文件(ps:1、控制器中使用的admin_view_base_path為自定義函數,指向后臺視圖文件主目錄。2、視圖采用AdminLTE框架)
login.blade:form
創建后臺home控制器,運行:
php artisan make:controller Admin/Home/HomeController
編寫index方法返回視圖
若僅作登錄之后跳轉測試,home視圖中保留注銷按鈕即可,例:
home.blade
編輯配置文件config.admin.php,加入以下配置:
"route" => [ "prefix" => "admin", "namespace" => "AppHttpControllersAdmin", "middleware" => ["web", "admin"], ],
編寫路由文件routes/admin.php
config("admin.route.prefix"), "namespace" => config("admin.route.namespace"), "middleware" => config("admin.route.middleware"), ], function (Router $router) { $router->get("/", "HomeHomeController@index"); $router->get("login", "AuthLoginController@getLoginForm"); $router->post("login", "AuthLoginController@postLogin"); $router->post("logout", "AuthLoginController@postLogout"); });
數據表遷移與填充: 修改database/seeds/DatabaseSeeder
call(UsersTableSeeder::class); DB::table("administrators")->insert( [ "login_name" => "admin", "display_name" => "超級管理員", "password" => bcrypt("123456"), "created_at" => date("Y-m-d H:i:s", time()), "updated_at" => date("Y-m-d H:i:s", time()), ] ); } }
運行:
php artisan migrate //數據表遷移 php artisan db:seed //數據填充
如果前臺使用了laravel框架用戶認證的話,需要重寫框架生成的LoginController的logout方法。防止前臺用戶注銷的時候清除后臺用戶的session。(ps:框架自帶用戶認證在注銷時會清空所有session)
/** * 重寫前臺注銷操作 * @param Request $request * @return IlluminateHttpRedirectResponse|IlluminateRoutingRedirector */ public function logout(Request $request) { $this->guard()->logout(); $request->session()->forget("uri.intented"); return redirect("/"); }
至此,后臺用戶登錄全部完成。enjoy it!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28515.html
摘要:繼第一篇文章發布之后框架學習之路一前后臺用戶認證分離,忙著項目上的事情,一直沒有時間寫文章。進入到新公司后,忙里偷閑,繼續我的框架學習之路。附件筆者的布局全局文件整頁刷新時,菜單顯示刪除按鈕確定刪除此項確定取消 繼第一篇文章發布之后laravel框架學習之路(一)前后臺用戶認證分離,忙著項目上的事情,一直沒有時間寫文章。進入到新公司后,忙里偷閑,繼續我的laravel框架學習之路。如需...
摘要:繼第一篇文章發布之后框架學習之路一前后臺用戶認證分離,忙著項目上的事情,一直沒有時間寫文章。進入到新公司后,忙里偷閑,繼續我的框架學習之路。附件筆者的布局全局文件整頁刷新時,菜單顯示刪除按鈕確定刪除此項確定取消 繼第一篇文章發布之后laravel框架學習之路(一)前后臺用戶認證分離,忙著項目上的事情,一直沒有時間寫文章。進入到新公司后,忙里偷閑,繼續我的laravel框架學習之路。如需...
摘要:繼第一篇文章發布之后框架學習之路一前后臺用戶認證分離,忙著項目上的事情,一直沒有時間寫文章。進入到新公司后,忙里偷閑,繼續我的框架學習之路。附件筆者的布局全局文件整頁刷新時,菜單顯示刪除按鈕確定刪除此項確定取消 繼第一篇文章發布之后laravel框架學習之路(一)前后臺用戶認證分離,忙著項目上的事情,一直沒有時間寫文章。進入到新公司后,忙里偷閑,繼續我的laravel框架學習之路。如需...
摘要:在開發中,用戶認證是核心,是數據是否有保障的前提,目前主要有兩種常用方式進行用戶認證和。附是為了在網絡應用環境間傳遞聲明而執行的一種基于的開放標準。 好久沒寫 PHP 代碼了,尤其是 Lumen,我是 Lumen 的忠實用戶,自從面世開始,我就將 Lumen 作為我 API 的主要框架使用。 但說到 API,不得不說的一個概念:「前后端分離」,現在越來越多的團隊都采用前后端分離,徹底解...
摘要:的契約是一組定義框架提供的核心服務的接口,例如我們在介紹用戶認證的章節中到的用戶看守器契約和用戶提供器契約以及框架自帶的模型所實現的契約。接口與團隊開發當你的團隊在開發大型應用時,不同的部分有著不同的開發速度。 Contracts Laravel 的契約是一組定義框架提供的核心服務的接口, 例如我們在介紹用戶認證的章節中到的用戶看守器契約IllumninateContractsAuth...
閱讀 2508·2021-10-11 10:59
閱讀 2700·2021-09-22 15:49
閱讀 2637·2021-08-13 13:25
閱讀 1285·2019-08-30 13:14
閱讀 2386·2019-08-29 18:45
閱讀 2990·2019-08-29 18:36
閱讀 1482·2019-08-29 13:21
閱讀 1157·2019-08-26 11:44