这是处理程序类,我已经覆盖了guest
的方法protected function unauthenticated($request, AuthenticationException $exception){
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('admin'));
}
我的路线文件包含我想要到达的路线
Route::get('admin','Admin\AdminController@createAdminform');
Route::post('admin','Admin\AdminController@adminLogin');
答案 0 :(得分:1)
更改您的路线如下: -
Route::get('admin','Admin\AdminController@createAdminform')->name('admin');
命名路线
命名路由可以方便地生成特定路由的URL或重定向。您可以通过将名称方法链接到路径定义来指定路径的名称:
Route::get('user/profile', function () {
//
})->name('profile');
您还可以为控制器操作指定路径名称:
Route::get('user/profile', 'UserController@showProfile')->name('profile');
为了更加了解,我建议您阅读laravel的官方路由文档。
答案 1 :(得分:0)
在您的代码中,您使用Laravel中的route()
辅助函数调用命名路由。在文档中
$url = route('routeName');
route函数为给定的命名路由生成一个URL:
关键字有named routes
这解释了为什么Route::get('admin','Admin\AdminController@createAdminform');
不等于redirect()->guest(route('admin'));
直到您使用命名路由功能为路由命名,Laravel将不知道您要使用的路由,因此route()
函数将抛出一个未定义的异常。
所以这里有一些方法可以解决这个问题。
正确的方法是将覆盖函数添加到app/Exceptions/Handler
文件中,如下所示
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest('/admin');
}
如果你真的想使用命名路由,你可以保留上述内容,并调整它以使用这些路由,但是,它应该保持一致,如果你在这里使用命名路由,在任何地方使用它们。
将路线更改为这样
Route::get('admin','Admin\AdminController@createAdminform')->name('admin');
然后改变我们刚创建的未经验证的函数
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('admin));
}
就个人而言,除非我在其他地方使用命名路由,并且将路径名称保持为常量是有意义的,我认为更容易添加“管理员”#39;字符串得到你想要的。
我知道@parthu_panther在上面的回答中回答了大部分内容,只是在我的评论解决问题时添加了我的答案