'AuthAuthController', 'password' => '" />

国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
中間件
首頁 后端開發(fā) php教程 Laravel 五 基礎(chǔ)(十二)- 認(rèn)證

Laravel 五 基礎(chǔ)(十二)- 認(rèn)證

Jun 13, 2016 pm 12:17 PM
auth middleware request return

Laravel 5 基礎(chǔ)(十二)- 認(rèn)證

Laravel 出廠已經(jīng)帶有了用戶認(rèn)證系統(tǒng),我們來看一下 routes.php,如果刪除了,添加上:

<code>Route::controllers([    'auth' => 'Auth\AuthController',    'password' => 'Auth\PasswordController']);</code>

可以使用 php artisan route:list 查看一下。瀏覽器中訪問 /auth/login,可以看到登陸界面,最好把系統(tǒng)默認(rèn)的 app.blade.php 中關(guān)于 google 的東西注釋起來,要不然你會瘋掉的。

你可以使用 register、login甚至 forget password。

實際注冊一個用戶,提交后失敗了,實際上沒有失敗,只是larave自動跳轉(zhuǎn)到了 /home,我們已經(jīng)刪除了這個控制器。你可以使用 tinker 看一下,用戶已經(jīng)建立了。

Auth\AuthController 中實際上使用了 trait,什么是 triat?well,php只支持單繼承,在php5.4中添加了trait,一個trait實際上是一組方法的封裝,你可以把它包含在另一個類中。像是抽象類,你不能直接實例化他。

Auth\AuthController 中有對 trait 的引用:

<code>use AuthenticatesAndRegistersUsers;</code>

讓我們找到他,看一下注冊后是怎么跳轉(zhuǎn)的。他隱藏的挺深的,在 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndregistersUsers.php,wow。

<code>	public function redirectPath()	{		if (property_exists($this, &#39;redirectPath&#39;))		{			return $this->redirectPath;		}                //如果用戶設(shè)置了 redirectTo 屬性,則跳轉(zhuǎn)到用戶設(shè)置的屬性,否則到home		return property_exists($this, &#39;redirectTo&#39;) ? $this->redirectTo : &#39;/home&#39;;	}</code>

OK,我們知道了,只要設(shè)定 redirectTo 這個屬性就可以自定義注冊后的跳轉(zhuǎn)了。我們在 Auth\AuthContotroller 中修改:

<code> protected $redirectTo = &#39;articles&#39;;</code>

我們先使用 /auth/logout 確保我們退出,如果出錯了不要害怕,我們沒有默認(rèn)的主頁,重新訪問:auth/register 新建一個用戶,這次應(yīng)該ok了。

再次logout,然后使用 login 登陸一下。

現(xiàn)在我們可以刪除 form_partial 中臨時設(shè)置的隱藏字段了,然后修改控制器:

<code>    public function store(Requests\ArticleRequest $request) {        //你可以這樣        //$request = $request->all();        //$request[&#39;user_id&#39;] = Auth::id();        //更簡單的方法        $article = Article::create($request->all());        //laravel 自動完成外鍵關(guān)聯(lián)        Auth::user()->articles()->save($article);        return redirect(&#39;articles&#39;);    }</code>

添加一個文章,然后使用 tinker 查看一下。

中間件

我們當(dāng)然不希望任何人都能發(fā)布文章,至少是登陸用才可以。我們在控制器中添加保護(hù):

<code>    public function create() {        if (Auth::guest()) {            return redirect(&#39;articles&#39;);        }        return view(&#39;articles.create&#39;);    }</code>

上面的代碼可以工作,有一個問題,我們需要在每一個需要保護(hù)的方法中都進(jìn)行上面的處理,這樣做太傻了,幸好我們有中間件。

中間件可以理解為一個處理管道,中間件在管道中的某一時刻進(jìn)行處理,這個時刻可以是請求也可以是響應(yīng)。依據(jù)中間件的處理規(guī)則,可能將請求重定向,也可能通過請求。

app/http/middleware 中包含了三個中間件,名字就可以看出是干什么,好好查看一下,注意,Closure $next 代表了下一個中間件。

app/http/kernel.php 中對中間件進(jìn)行登記。$middleware 段聲明了對所有http都進(jìn)行處理的中間件,$routeMiddleware 僅僅對路由進(jìn)行處理,而且你必須顯示的聲明要使用這其中的某一個或幾個中間件。

假設(shè)我們想對整個的 ArticlesController 進(jìn)行保護(hù),我們直接在構(gòu)造函數(shù)中添加中間件:

<code>    public function __construct() {        $this->middleware(&#39;auth&#39;);    }</code>

現(xiàn)在,任何方法都收到了保護(hù)。

但我們可能不想整個控制器都受到保護(hù),如果只是其中的一兩個方法呢?我們可以這樣處理:

<code>    public function __construct() {        $this->middleware(&#39;auth&#39;, [&#39;only&#39; => &#39;create&#39;]);        //當(dāng)然可以反過來        //$this->middleware(&#39;auth&#39;, [&#39;except&#39; => &#39;index&#39;]);    }</code>

我們不一定在控制器的構(gòu)造函數(shù)中引入中間件,我們可以直接在路由中聲明:

<code>Route::get(&#39;about&#39;, [&#39;middleware&#39; => &#39;auth&#39;, &#39;uses&#39; => &#39;[email&#160;protected]&#39;]);</code>

kernel.php 中提供的系統(tǒng)中間件,比如 'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode' 是可以讓我們進(jìn)入到維護(hù)模式,比如系統(tǒng)上線了,但現(xiàn)在需要臨時關(guān)閉一段時間進(jìn)行處理,我們可以在命令行進(jìn)行處理,看一下這個中間件的工作:

<code>php artisan down</code>

訪問一下網(wǎng)站,可以看到任何 url 的請求都是馬上回來。網(wǎng)站上線:

<code>php artisan up</code>

我們來做一個自己的中間件:

<code> php artisan make:middleware Demo</code>

然后添加代碼:

<code>	public function handle($request, Closure $next)	{        //如果請求中含有 foo,我們就回到控制器首頁        if ($request->has(&#39;foo&#39;)) {            return redirect(&#39;articles&#39;);        }		return $next($request);	}</code>

如果希望在全部的請求使用中間件,需要在 kernel.php 中的 $middleware 中登記:

<code>	protected $middleware = [		...		&#39;App\Http\Middleware\Demo&#39;,	];</code>

現(xiàn)在我們可以測試一下,假設(shè)我們訪問 /articles/create?foo=bar ,我們被重定向到了首頁。

讓我們?nèi)コ@個顯示中間件,我們來創(chuàng)建一個真正有用的中間件。假設(shè)我們想保護(hù)某個頁面,這個頁面必須是管理者才能訪問的。

<code>php artisan make:middleware RedirectIfNotAManager</code>

我們來添加處理代碼:

<code>	public function handle($request, Closure $next)	{        if (!$request->user() || !$request->user()->isATeamManager()) {            return redirect(&#39;articles&#39;);        }		return $next($request);	}</code>

下面修改我們的模型:

<code>    public function isATeamManager() {        return false;    }</code>

簡單起見,我們直接返回false。這次我們把中間件放置在 kernel.php 中的$routeMiddleware 中。

<code>	protected $routeMiddleware = [		...		&#39;manager&#39; => &#39;App\Http\Middleware\RedirectIfNotAManager&#39;,	];</code>

我們做一個測試路由測試一下:

<code>Route::get(&#39;foo&#39;, [&#39;middleware&#39; => &#39;manager&#39;, function() {    return &#39;This page may only be viewed by manager&#39;;}]);</code>

guest身份訪問或者登錄身份訪問都會返回主頁,但是如果修改 isATeamManager() 返回 true,登錄身份訪問可以看到返回的信息。

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

C語言return的用法詳解 C語言return的用法詳解 Oct 07, 2023 am 10:58 AM

C語言return的用法有:1、對于返回值類型為void的函數(shù),可以使用return語句來提前結(jié)束函數(shù)的執(zhí)行;2、對于返回值類型不為void的函數(shù),return語句的作用是將函數(shù)的執(zhí)行結(jié)果返回給調(diào)用者;3、提前結(jié)束函數(shù)的執(zhí)行,在函數(shù)內(nèi)部,我們可以使用return語句來提前結(jié)束函數(shù)的執(zhí)行,即使函數(shù)并沒有返回值。

php request什么意思 php request什么意思 Jul 07, 2021 pm 01:49 PM

request的中文意思為“請求”,是php中的一個全局變量,是一個包含了“$_POST”、“$_GET”和“$_COOKIE”的數(shù)組?!?_REQUEST”變量可以獲取POST或GET方式提交的數(shù)據(jù)、COOKIE信息。

Java中return和finally語句的執(zhí)行順序是怎樣的? Java中return和finally語句的執(zhí)行順序是怎樣的? Apr 25, 2023 pm 07:55 PM

源碼:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#輸出上述代碼的輸出可以簡單地得出結(jié)論:return在finally之前執(zhí)行,我們來看下字節(jié)碼層面上發(fā)生了什么事情。下面截取case1方法的部分字節(jié)碼,并且對照源碼,將每個指令的含義注釋在

Java API 開發(fā)中使用 Auth0 進(jìn)行身份認(rèn)證 Java API 開發(fā)中使用 Auth0 進(jìn)行身份認(rèn)證 Jun 18, 2023 pm 05:30 PM

在現(xiàn)代軟件開發(fā)中,身份認(rèn)證是一項非常重要的安全措施。Auth0是一家提供身份認(rèn)證服務(wù)的公司,它可以幫助開發(fā)者快速實現(xiàn)多種身份認(rèn)證方式(包括OAuth2、OpenIDConnect等),并提供安全可靠的認(rèn)證服務(wù)。在本文中,我們將介紹如何在JavaAPI開發(fā)中使用Auth0進(jìn)行身份認(rèn)證。第一步:創(chuàng)建Auth0賬號并注冊應(yīng)用首先,我們需要在

Python 3.x 中如何使用urllib.request.urlopen()函數(shù)發(fā)送GET請求 Python 3.x 中如何使用urllib.request.urlopen()函數(shù)發(fā)送GET請求 Jul 30, 2023 am 11:28 AM

Python3.x中如何使用urllib.request.urlopen()函數(shù)發(fā)送GET請求在網(wǎng)絡(luò)編程中,我們經(jīng)常需要通過發(fā)送HTTP請求來獲取遠(yuǎn)程服務(wù)器的數(shù)據(jù)。在Python中,我們可以使用urllib模塊中的urllib.request.urlopen()函數(shù)來發(fā)送HTTP請求,并獲取服務(wù)器返回的響應(yīng)。本文將介紹如何使用

怎么將Vue3?Axios攔截器封裝成request文件 怎么將Vue3?Axios攔截器封裝成request文件 May 19, 2023 am 11:49 AM

1、創(chuàng)建一個名為request.js的新文件,并導(dǎo)入Axios:importaxiosfrom'axios';2、創(chuàng)建一個名為request的函數(shù),并將其導(dǎo)出:這將創(chuàng)建一個名為request的函數(shù),并將其設(shè)置為具有基本URL的新的Axios實例。要在封裝的Axios實例中添加超時設(shè)置,可以在創(chuàng)建Axios實例時傳遞timeout選項。exportconstrequest=axios.create({baseURL:'https://example.

PHP中的request是什么 PHP中的request是什么 Jun 01, 2023 am 10:12 AM

PHP中的request是指請求,它是PHP中的一個超全局變量,用于收集HTML表單提交的數(shù)據(jù),以及URL中的參數(shù), 可以同時獲取GET和POST請求的數(shù)據(jù), 注意$_request是一個關(guān)聯(lián)數(shù)組,其中的鍵是表單字段的名稱,值是表單字段的值。在使用$_request變量時,應(yīng)始終對用戶輸入的數(shù)據(jù)進(jìn)行驗證和過濾,以避免安全問題。

PHP中的Request對象是什么? PHP中的Request對象是什么? Feb 27, 2024 pm 09:06 PM

PHP中的Request對象是用于處理客戶端發(fā)送到服務(wù)器的HTTP請求的對象。通過Request對象,我們可以獲取客戶端的請求信息,比如請求方法、請求頭信息、請求參數(shù)等,從而實現(xiàn)對請求的處理和響應(yīng)。在PHP中,可以使用$_REQUEST、$_GET、$_POST等全局變量來獲取請求的信息,但是這些變量并不是對象,而是數(shù)組。為了更加靈活和方便地處理請求信息,可

See all articles