无法在auth中间件后面路由两条路由

时间:2015-05-14 15:41:26

标签: authentication laravel-5

我的两条路线' admin.media.begin-destroy'和' admin.media.destroy'中间件=>时失败' AUTH'

当试图访问该路线时,管理员#media.begin-destroy'我将从身份验证控制器获得登录页面,如果不尝试访问其他页面,我无法摆脱这种情况。

在我的开发机器上,无论是否使用auth中间件都能正常工作

以下是受保护的路线:

Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function() {
  Route::get('/', ['as' => 'admin.dashboard', 'uses' => 'Admin\DashboardController@index']);    

  Route::get('show/{show}/toggle',['as' => 'admin.show.toggle','uses'=>'Admin\ShowController@toggle']);
  Route::resource('show', 'Admin\ShowController');

  // The admin.media.begin-destroy and admin.media.destroy fails when middleware => 'auth'
  Route::get('media/begin-destroy-ddd/{id}', ['as' => 'admin.media.begin-destroy', 'uses' => 'Admin\MediaController@beginDestroy']);
  Route::resource('media', 'Admin\MediaController', ['only' => ['index', 'create', 'store', 'destroy']]);

  Route::get('order', ['as'=> 'admin.order.index', 'uses' => 'Admin\OrderController@index']);
  Route::get('order/list-for-modification', ['as' => 'admin.order.list-for-modification', 'uses' => 'Admin\OrderController@listModify']);
  Route::get('order/{order}/begin-destroy', ['as' => 'admin.order.begin-destroy', 'uses' => 'Admin\OrderController@beginDestroy']);
  Route::delete('order/{order}/destroy', ['as' => 'admin.order.destroy', 'uses' => 'Admin\OrderController@destroy']);
});

' admin.media.begin-destroy'的控制器方法和' admin.media.destroy'非常简单:

public function beginDestroy($filename)
{
    return view('admin.media.begin-destroy', compact('filename'));
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $filename
 * @return Response
 */
public function destroy($filename)
{
    Storage::disk('free-media')->delete($filename);
    return redirect()->route('admin.media.index');
}

我很困惑为什么这不起作用。

编辑!--- 试着解决我的问题

/将有问题的路由移动到没有中间件的自己的组中

Route::group(['prefix' => 'admin'], function() {
  Route::get('media/begin-destroy/{id}', ['as' => 'admin.media.begin-destroy', 'uses' => 'Admin\MediaController@beginDestroy']);
  Route::resource('media', 'Admin\MediaController', ['only' => ['index', 'create', 'store', 'destroy']]);
});

/在Admin \ Mediacontroller构造函数中添加了中间件注册,我无法添加beginDestroy,因为它会因为未知原因而失败     公共函数__construct()     {         $ this->中间件(' auth',['除了' => [' beginDestroy']]);     }

//在beginDestroy中,我然后检查用户,并且用户未登录WTF

public function beginDestroy($filename)
{
    if (Auth::check())
    {
        return view('admin.media.begin-destroy', compact('filename'));
    }
    // I end up here.
    return "Un-authorized";
}

对于这个特殊用例,我可以禁用checkDestroy中的检查,因为在实际的销毁代码中,auth再次工作,但是发生了什么?

1 个答案:

答案 0 :(得分:1)

更改路线以使用旧的问号传递文件名,这有所不同!

这实际上更像是一个解决方法,而不是一个答案,而且我仍然不知道为什么它不会以其他方式起作用,无论如何,这是我的解决方法,这就是诀窍。

Parent