在 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 应用程序在上传实时服务器后发生不必要的重定向

如何在 Laravel 中进行简单的重定向?

Laravel 5.0 - 登录失败时更改重定向

Laravel Spark - 登录时重定向

Laravel - 以 .php 结尾的重定向捕获/重定向 URL

我在中间件上做了一些更改,Laravel重定向次数太多次才能登录