路由級別的中間件在返回視圖時(shí)應(yīng)準(zhǔn)備響應(yīng)

今天遇到了一個(gè)小問題但是為了解決用了很久的時(shí)間,覺得有必要記錄一下這個(gè)過程使碾。


首先是設(shè)置了一個(gè)用于身份驗(yàn)證中間件Admin蜜徽,代碼如下:

public function handle($request, Closure $next)    {
        if(session('user')->user_group != 1){
            $msg ="對不起,您無權(quán)訪問訪問本頁面!";
            return view('error',compact('msg'));
       }
        return $next($request);
    }

如果使用管理員身份登錄則一切正常,但是如果使用非管理員身份登錄則會(huì)出現(xiàn)一個(gè)錯(cuò)誤票摇。


錯(cuò)誤信息

搜索了很久終于在Laracasts發(fā)現(xiàn)有人有人針對這個(gè)錯(cuò)誤提問拘鞋,其中一個(gè)回答是

There are two types of middleware one that are applied to the global level and one that we apply to the route level. The route level middleware run inside the router's own local middleware stack. When we return some view from controller i.ereturn view('auth/login') the router's method dispatchToRoute explicitly prepares the Response object so that it can be used inside the global middleware (or in general can be returned to the browser). That said, only returning a view never prepares the response so the route lever middlewares throw such errors. you can fix it by simply returning a response rather then a rendered view.

由于英語水平不行并沒有完全看懂,個(gè)人理解是Laravel有兩種級別的中間件矢门,一種是應(yīng)用于全局級別的中間件一種是應(yīng)用于路由級別的中間件盆色,在只返回一個(gè)視圖時(shí)不會(huì)準(zhǔn)備響應(yīng),所以頭信息為空祟剔,導(dǎo)致setCookie()無法調(diào)用隔躲。要修復(fù)這個(gè)問題應(yīng)該返回一個(gè)Response對象,使用該類的view()方法來取代直接返回一個(gè)渲染視圖物延。

//replace your `view returns` with `reponse returns` e.g:
return view('home.index')
//replace with
return response()->view('home.index')

而另一個(gè)回答則建議更好的處理方式是自己在中間件里準(zhǔn)備響應(yīng)

use Illuminate\Http\Response;
use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
.. 
public function handle($request, Closure $next) {
 $response = $this->prepareResponse($request, $next($request)); 
if ($this->isReading($request) || $this->tokensMatch($request)) {
 return $this->addCookieToResponse($request, $response);
 } 
throw new TokenMismatchException; 
} 
// this one is in fact a copy-paste from the Router 
protected function prepareResponse($request, $response) {
 if ( ! $response instanceof SymfonyResponse) {
 $response = new Response($response); 
} 
return $response->prepare($request); 
}

[原文鏈接][1] 以后有時(shí)間再深入研究
[1]:https://laracasts.com/discuss/channels/general-discussion/disable-global-verifycsrftoken-and-use-as-middleware-doesnt-work-setcookie-on-null

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宣旱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叛薯,更是在濱河造成了極大的恐慌浑吟,老刑警劉巖笙纤,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異组力,居然都是意外死亡省容,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門燎字,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腥椒,“玉大人,你說我怎么就攤上這事轩触∧穑” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵脱柱,是天一觀的道長伐弹。 經(jīng)常有香客問我,道長榨为,這世上最難降的妖魔是什么惨好? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮随闺,結(jié)果婚禮上日川,老公的妹妹穿的比我還像新娘。我一直安慰自己矩乐,他們只是感情好龄句,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著散罕,像睡著了一般分歇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上欧漱,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天职抡,我揣著相機(jī)與錄音,去河邊找鬼误甚。 笑死缚甩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窑邦。 我是一名探鬼主播擅威,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冈钦!你這毒婦竟也來了郊丛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宾袜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驾窟,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庆猫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绅络。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片月培。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恩急,靈堂內(nèi)的尸體忽然破棺而出杉畜,到底是詐尸還是另有隱情,我是刑警寧澤衷恭,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布此叠,位于F島的核電站,受9級特大地震影響随珠,放射性物質(zhì)發(fā)生泄漏灭袁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一窗看、第九天 我趴在偏房一處隱蔽的房頂上張望茸歧。 院中可真熱鬧,春花似錦显沈、人聲如沸软瞎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涤浇。三九已至,卻和暖如春遂唧,著一層夾襖步出監(jiān)牢的瞬間芙代,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工盖彭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纹烹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓召边,卻偏偏與公主長得像铺呵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子隧熙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,399評論 0 23
  • 應(yīng)用對象 app.set(name, value):用于設(shè)置Express配置中的環(huán)境變量 Assigns set...
    不系流年系乾坤閱讀 398評論 0 0
  • 好幾次片挂,我都苦惱,本來很好的兩個(gè)人。突然間為了一點(diǎn)小小的利益音念,就可以隨意的誹謗陷害沪饺,一般情況下,我都覺得是別人有負(fù)...
    起舞一笑閱讀 146評論 0 0
  • 現(xiàn)在會(huì)被各種信息提醒:時(shí)間流逝多快闷愤、歲月如何偷偷溜走整葡、2017年已經(jīng)過了三分之一之類的種種。不得不逼蕓蕓眾生更早的...
    陶柔克閱讀 340評論 0 0
  • 星期二讥脐,上海遭居,霧霾嚴(yán)重 睡到上午10點(diǎn),沖好咖啡旬渠,拿出昨天做失敗的曲奇餅俱萍,下載簡書,取名微涼札記告丢,廣播中放著101...
    微涼札記閱讀 186評論 0 0