摘要:防止前臺(tái)用戶注銷的時(shí)候清除后臺(tái)用戶的??蚣茏詭в脩粽J(rèn)證在注銷時(shí)會(huì)清空所有重寫前臺(tái)注銷操作至此,后臺(tái)用戶登錄全部完成。
準(zhǔn)備工作:
1、下載laravel框架
2、配置好項(xiàng)目(數(shù)據(jù)庫(kù)連接以及虛擬主機(jī))
開始:
前臺(tái)用戶認(rèn)證laravel已經(jīng)為我們寫好了,此部分可參考官方文檔
創(chuàng)建模型(以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模型
創(chuàng)建后臺(tái)配置文件admin.php,在return數(shù)組中寫入
"auth" => [ "guards" => [ "administrator" => [ "driver" => "session", "provider" => "administrators", ], ], "providers" => [ "administrators" => [ "driver" => "eloquent", "model" => AppModelsAdministrator::class, ], ], ],創(chuàng)建后臺(tái)用戶認(rèn)證中間件Authenticate,運(yùn)行:
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; } }創(chuàng)建AdminServiceProvider,運(yùn)行:
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(); } /** * 注冊(cè)路由中間件 */ public function registerRouteMiddleWare() { // 注冊(cè)路由中間件 foreach ($this->routeMiddleware as $key => $middleware) { app("router")->aliasMiddleware($key, $middleware); } // 注冊(cè)路由中間件組 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中注冊(cè)provider和facades
"providers" => [ ..., AppProvidersAdminServiceProvider::class, ] "aliases" => [ ..., "Admin" => AppFacadesAdminAdmin::class, ]創(chuàng)建登錄表單驗(yàn)證類,運(yùn)行:
php artisan make:request AdministratorLoginRequest重寫其父類rules及messages方法:
"required", "password" => ["required", "min:6"] //密碼必須,最小長(zhǎng)度為6 ]; } public function messages() { return [ "login_name.required" => "請(qǐng)輸入用戶名", "password.required" => "請(qǐng)輸入密碼", "password.min" => "密碼至少6位", ]; } }創(chuàng)建登錄控制器,運(yùn)行:
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" => "用戶名或密碼錯(cuò)誤" ]); } } /** * 注銷登錄 * @return IlluminateHttpRedirectResponse|IlluminateRoutingRedirector */ public function postLogout() { Auth::guard("administrator")->logout(); session()->forget("url.intented"); return redirect(config("admin.route.prefix")); } }至此,認(rèn)證業(yè)務(wù)已經(jīng)完成,接下來(lái)進(jìn)行完善,使系統(tǒng)能夠跑起來(lái)
創(chuàng)建視圖文件(ps:1、控制器中使用的admin_view_base_path為自定義函數(shù),指向后臺(tái)視圖文件主目錄。2、視圖采用AdminLTE框架)
login.blade:form
創(chuàng)建后臺(tái)home控制器,運(yùn)行:
php artisan make:controller Admin/Home/HomeController
編寫index方法返回視圖
若僅作登錄之后跳轉(zhuǎn)測(cè)試,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"); });
數(shù)據(jù)表遷移與填充: 修改database/seeds/DatabaseSeeder
call(UsersTableSeeder::class); DB::table("administrators")->insert( [ "login_name" => "admin", "display_name" => "超級(jí)管理員", "password" => bcrypt("123456"), "created_at" => date("Y-m-d H:i:s", time()), "updated_at" => date("Y-m-d H:i:s", time()), ] ); } }
運(yùn)行:
php artisan migrate //數(shù)據(jù)表遷移 php artisan db:seed //數(shù)據(jù)填充
如果前臺(tái)使用了laravel框架用戶認(rèn)證的話,需要重寫框架生成的LoginController的logout方法。防止前臺(tái)用戶注銷的時(shí)候清除后臺(tái)用戶的session。(ps:框架自帶用戶認(rèn)證在注銷時(shí)會(huì)清空所有session)
/** * 重寫前臺(tái)注銷操作 * @param Request $request * @return IlluminateHttpRedirectResponse|IlluminateRoutingRedirector */ public function logout(Request $request) { $this->guard()->logout(); $request->session()->forget("uri.intented"); return redirect("/"); }
至此,后臺(tái)用戶登錄全部完成。enjoy it!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28515.html
摘要:繼第一篇文章發(fā)布之后框架學(xué)習(xí)之路一前后臺(tái)用戶認(rèn)證分離,忙著項(xiàng)目上的事情,一直沒有時(shí)間寫文章。進(jìn)入到新公司后,忙里偷閑,繼續(xù)我的框架學(xué)習(xí)之路。附件筆者的布局全局文件整頁(yè)刷新時(shí),菜單顯示刪除按鈕確定刪除此項(xiàng)確定取消 繼第一篇文章發(fā)布之后laravel框架學(xué)習(xí)之路(一)前后臺(tái)用戶認(rèn)證分離,忙著項(xiàng)目上的事情,一直沒有時(shí)間寫文章。進(jìn)入到新公司后,忙里偷閑,繼續(xù)我的laravel框架學(xué)習(xí)之路。如需...
摘要:繼第一篇文章發(fā)布之后框架學(xué)習(xí)之路一前后臺(tái)用戶認(rèn)證分離,忙著項(xiàng)目上的事情,一直沒有時(shí)間寫文章。進(jìn)入到新公司后,忙里偷閑,繼續(xù)我的框架學(xué)習(xí)之路。附件筆者的布局全局文件整頁(yè)刷新時(shí),菜單顯示刪除按鈕確定刪除此項(xiàng)確定取消 繼第一篇文章發(fā)布之后laravel框架學(xué)習(xí)之路(一)前后臺(tái)用戶認(rèn)證分離,忙著項(xiàng)目上的事情,一直沒有時(shí)間寫文章。進(jìn)入到新公司后,忙里偷閑,繼續(xù)我的laravel框架學(xué)習(xí)之路。如需...
摘要:繼第一篇文章發(fā)布之后框架學(xué)習(xí)之路一前后臺(tái)用戶認(rèn)證分離,忙著項(xiàng)目上的事情,一直沒有時(shí)間寫文章。進(jìn)入到新公司后,忙里偷閑,繼續(xù)我的框架學(xué)習(xí)之路。附件筆者的布局全局文件整頁(yè)刷新時(shí),菜單顯示刪除按鈕確定刪除此項(xiàng)確定取消 繼第一篇文章發(fā)布之后laravel框架學(xué)習(xí)之路(一)前后臺(tái)用戶認(rèn)證分離,忙著項(xiàng)目上的事情,一直沒有時(shí)間寫文章。進(jìn)入到新公司后,忙里偷閑,繼續(xù)我的laravel框架學(xué)習(xí)之路。如需...
摘要:在開發(fā)中,用戶認(rèn)證是核心,是數(shù)據(jù)是否有保障的前提,目前主要有兩種常用方式進(jìn)行用戶認(rèn)證和。附是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于的開放標(biāo)準(zhǔn)。 好久沒寫 PHP 代碼了,尤其是 Lumen,我是 Lumen 的忠實(shí)用戶,自從面世開始,我就將 Lumen 作為我 API 的主要框架使用。 但說(shuō)到 API,不得不說(shuō)的一個(gè)概念:「前后端分離」,現(xiàn)在越來(lái)越多的團(tuán)隊(duì)都采用前后端分離,徹底解...
摘要:的契約是一組定義框架提供的核心服務(wù)的接口,例如我們?cè)诮榻B用戶認(rèn)證的章節(jié)中到的用戶看守器契約和用戶提供器契約以及框架自帶的模型所實(shí)現(xiàn)的契約。接口與團(tuán)隊(duì)開發(fā)當(dāng)你的團(tuán)隊(duì)在開發(fā)大型應(yīng)用時(shí),不同的部分有著不同的開發(fā)速度。 Contracts Laravel 的契約是一組定義框架提供的核心服務(wù)的接口, 例如我們?cè)诮榻B用戶認(rèn)證的章節(jié)中到的用戶看守器契約IllumninateContractsAuth...
閱讀 2536·2021-10-11 10:59
閱讀 2715·2021-09-22 15:49
閱讀 2650·2021-08-13 13:25
閱讀 1293·2019-08-30 13:14
閱讀 2396·2019-08-29 18:45
閱讀 3003·2019-08-29 18:36
閱讀 1495·2019-08-29 13:21
閱讀 1166·2019-08-26 11:44