在 laravel 5.6.3 中更改登录的重定向 url
Posted
技术标签:
【中文标题】在 laravel 5.6.3 中更改登录的重定向 url【英文标题】:Changing redirect url for login in laravel 5.6.3 【发布时间】:2018-07-24 08:43:54 【问题描述】:我安装了 adminlte 主题,我想创建一个管理区域。 所以我的网址应该是这样的:
/admin = admin home page dashboard
/admin/login
/admin/register/
这是我目前的路线:
Route::group(['middleware' => 'auth'], function ()
Route::get('/admin', ['as' => 'admin', 'uses' => 'Admin\DashboardController@index']);
);
当我访问 /admin
页面时,我被重定向到 /login
而不是 /admin/login
重定向是从这里进行的:
vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
在unauthenticated
方法中
我从这里跟进了答案:Laravel 5.5 change unauthenticated login redirect url,但我最终遇到了这个错误:
Declaration of App\Exceptions\Handler::unauthenticated($request, App\Exceptions\AuthenticationException $exception) should be compatible with Illuminate\Foundation\Exceptions\Handler::unauthenticated($request, Illuminate\Auth\AuthenticationException $exception)
知道如何更改我的重定向网址吗?谢谢
【问题讨论】:
其实你没有 /admin/login 的路由,如果你使用 laravel 的默认身份验证,你就有 /login 的路由。 【参考方案1】:在 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php 中
更新功能认证
/**
* Convert an authentication exception into a response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
if($request->expectsJson())
return response()->json(['message' => $exception->getMessage()], 401);
$guard = array_get($exception->guards(),0);
switch ($guard)
case 'admin':
return redirect()->guest(route('admin.login'));
break;
default:
return redirect()->guest(route('login'));
break;
【讨论】:
那么随着下一次作曲家更新,我的代码将被更新;)【参考方案2】:实际上你没有路由/admin/login
。
在您的 routes\web.php
文件中,将路由创建为
// Authentication Routes...
$this->get('admin/login', 'Auth\LoginController@showLoginForm')->name('login');
在此更新后,未授权用户的默认重定向路由如下
在app/Exceptions/Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
if ($request->expectsJson())
return response()->json(['error' => 'Unauthenticated.'], 401);
return redirect()->guest('/admin/login');
要更新的正确位置:app/Exceptions/Handler.php
另一种您可以在路线上附加前缀的方式:
将文件app/providers/RouteServiceProvider.php
更新为
protected function mapWebRoutes()
Route::prefix('admin/')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
请注意Route::prefix('admin/')
,现在这样做你应该有类似的路线
Route::get('/', function () ......
Route::get('/login', function () .....
现在您只是在路由上附加前缀,而不是在 tha laravel 应用程序的任何地方更改路由。这样做可能会更好。
【讨论】:
嗨,我没有Auth::routes();
这部分,我把我的web.php
文件的所有内容都贴出来了,我添加了你建议的登录部分和功能,但是现在我不再重定向,我在 /admin 上得到了一个可爱的空白页面
好吧没问题,关键是你应该为admin/login
定义路由并且你应该更新了Handler.php。另一种方法是定义前缀。让我更新我的前缀答案。
我得到了空白页,因为语法错误。修复了这个问题,现在我得到了这个:Declaration of App\Exceptions\Handler::unauthenticated($request, App\Exceptions\AuthenticationException $exception) should be compatible with Illuminate\Foundation\Exceptions\Handler::unauthenticated($request, Illuminate\Auth\AuthenticationException $exception)
,但我没有重定向到 /login 或 /admin/login
在app/Exceptions/Handler.php
上使用Exception
而不是AuthenticationException
看看是否有效
保持 AuthenticationException 不变,并使用代码在 Handler.php 中包含 AuthenticationException:使用 Illuminate\Auth\AuthenticationException;。这对我有用。以上是关于在 laravel 5.6.3 中更改登录的重定向 url的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4.2 应用程序在上传实时服务器后发生不必要的重定向