Laravel重定向返回导致重定向循环

时间:2015-08-17 07:20:44

标签: php laravel laravel-5 laravel-routing laravel-5.1

当用户尝试访问该用户不允许的网址/product/{product_id}/edit时,我已将重定向添加回以前的网址并带有消息,

public function edit($product_id)
{
...
return redirect()->back()->with(['error' => 'No permission']);
...
}

当用户点击链接(标记)时,它会重定向回错误的上一个网址。但是当用户尝试输入网址/product/12/edit时,它会继续重定向到相同的网址并成为重定向循环。

如何妥善解决这个问题,是它和laravel bug吗?

3 个答案:

答案 0 :(得分:4)

Laravel,如果找不到HTTP_REFERER,则将用户重定向到相同的URL。 为了避免无限循环,我使用了这种方法:

$referer = Request::header('referer');
if(empty($referer)) {
  return Redirect::to(route('defaultRoute'));
} else {
  return Redirect::back();
}

答案 1 :(得分:0)

如果用户点击链接,当前网址将作为'HTTP_REFERER'传递,而laravel会将其用于重定向,但如果用户类型直接链接到浏览器地址栏,则不会有'HTTP_REFERER',因此会重定向循环

您可以使用route重定向到

return redirect(route('product.index'))->with(['error' => 'No permission']);

因此用户将始终被重定向到索引页。

答案 2 :(得分:0)

重定向应该如下:

return redirect()->back()->with('error', 'No permission');

参考:larave doc