成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

laravel框架學(xué)習(xí)之路(一)前后臺(tái)用戶認(rèn)證分離

Joonas / 475人閱讀

摘要:防止前臺(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

重寫其父類rulesmessages方法:

 "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

@csrf
@if ($errors->has("login_name")) {{ $errors->first("login_name") }} @endif
@if ($errors->has("password")) {{ $errors->first("password") }} @endif

創(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)證的話,需要重寫框架生成的LoginControllerlogout方法。防止前臺(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

相關(guān)文章

  • laravel框架學(xué)習(xí)之路(二)pjax的使用

    摘要:繼第一篇文章發(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í)之路。如需...

    lily_wang 評(píng)論0 收藏0
  • laravel框架學(xué)習(xí)之路(二)pjax的使用

    摘要:繼第一篇文章發(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í)之路。如需...

    gotham 評(píng)論0 收藏0
  • laravel框架學(xué)習(xí)之路(二)pjax的使用

    摘要:繼第一篇文章發(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í)之路。如需...

    vvpale 評(píng)論0 收藏0
  • 學(xué)習(xí) Lumen 用戶認(rèn)證 ()

    摘要:在開發(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ì)都采用前后端分離,徹底解...

    wangzy2019 評(píng)論0 收藏0
  • Laravel核心解讀--Contracts契約

    摘要:的契約是一組定義框架提供的核心服務(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...

    Prasanta 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<