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

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

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

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

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

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

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

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

可以使用 php artisan route:list 查看一下。瀏覽器中訪問 /auth/login,可以看到登陸界面,最好把系統(tǒng)默認的 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 確保我們退出,如果出錯了不要害怕,我們沒有默認的主頁,重新訪問:auth/register 新建一個用戶,這次應該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 查看一下。

中間件

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

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

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

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

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

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

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

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

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

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

<code>    public function __construct() {        $this->middleware(&#39;auth&#39;, [&#39;only&#39; => &#39;create&#39;]);        //當然可以反過來        //$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' 是可以讓我們進入到維護模式,比如系統(tǒng)上線了,但現(xiàn)在需要臨時關(guā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è)我們想保護某個頁面,這個頁面必須是管理者才能訪問的。

<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,登錄身份訪問可以看到返回的信息。

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的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é)果傳回給呼叫者;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」變數(shù)可以取得POST或GET方式提交的資料、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 進行身分認證 Java API 開發(fā)中使用 Auth0 進行身分認證 Jun 18, 2023 pm 05:30 PM

在現(xiàn)代軟體開發(fā)中,身分認證是一項非常重要的安全措施。 Auth0是一家提供身分認證服務的公司,它可以幫助開發(fā)者快速實現(xiàn)多種身分認證方式(包括OAuth2、OpenIDConnect等),並提供安全可靠的認證服務。在本文中,我們將介紹如何在JavaAPI開發(fā)中使用Auth0進行身份認證。第一步:建立Auth0帳號並註冊應用程式首先,我們需要在

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)路程式設(shè)計中,我們經(jīng)常需要透過發(fā)送HTTP請求來取得遠端伺服器的資料。在Python中,我們可以使用urllib模組中的urllib.request.urlopen()函數(shù)來傳送HTTP請求,並取得伺服器回傳的回應。本文將介紹如何使用

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

1.建立一個名為request.js的新文件,並匯入Axios:importaxiosfrom'axios';2、建立一個名為request的函數(shù),並將其匯出:這將建立一個名為request的函數(shù),並將其設(shè)定為具有基本URL的新的Axios實例。若要在封裝的Axios實例中新增逾時設(shè)置,可以在建立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變數(shù)時,應始終對使用者輸入的資料進行驗證和過濾,以避免安全性問題。

PHP中的Request物件是什麼? PHP中的Request物件是什麼? Feb 27, 2024 pm 09:06 PM

PHP中的Request物件是用來處理客戶端傳送到伺服器的HTTP請求的物件。透過Request對象,我們可以取得客戶端的請求訊息,例如請求方法、請求頭資訊、請求參數(shù)等,從而實現(xiàn)對請求的處理和回應。在PHP中,可以使用$_REQUEST、$_GET、$_POST等全域變數(shù)來取得要求的信息,但是這些變數(shù)並不是對象,而是陣列。為了更靈活和方便地處理請求訊息,可

See all articles