如何更改Laravel 5 Auth过滤器的默认重定向URL?

时间:2015-02-24 17:29:09

标签: php laravel-5

默认情况下,如果我没有登录,我尝试在浏览器中访问它:

http://localhost:8000/home

它将我重定向到http://localhost:8000/auth/login

如何更改以将我重定向到http://localhost:8000/login

10 个答案:

答案 0 :(得分:40)

我想在Laravel 5.5中做同样的事情。处理身份验证已移至Illuminate\Auth\Middleware\Authenticate,这会引发Illuminate\Auth\AuthenticationException

该异常在Illuminate\Foundation\Exceptions\Hander.php处理,但您不想更改原始供应商文件,因此您可以使用自己的项目文件将其添加到App\Exceptions\Handler.php来覆盖它。 / p>

为此,请将以下内容添加到HandlerApp\Exceptions\Handler.php类的顶部:

use Illuminate\Auth\AuthenticationException;

然后添加以下方法,根据需要进行编辑:

/**
 * Convert an authentication exception into an unauthenticated 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(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest('login'); //<----- Change this
}

只需将return redirect()->guest('login');更改为return redirect()->guest(route('auth.login'));或其他任何内容。

我想把它写下来,因为花了我超过5分钟来搞清楚。如果你碰巧在文档中找到了这个,请告诉我一行,因为我不能。

答案 1 :(得分:30)

只是为了延伸@ ultimate的答案:

  1. 您需要修改App\Http\Middleware\Authenticate::handle()方法并将auth/login更改为/login
  2. 您需要将$loginPath属性添加到\App\Http\Controllers\Auth\AuthController课程。为什么?见Laravel source
  3. 结果你将在中间件中使用它:

    namespace App\Http\Middleware;
    class Authenticate {
            /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if ($this->auth->guest())
            {
                if ($request->ajax())
                {
                    return response('Unauthorized.', 401);
                }
                else
                {
                    return redirect()->guest('/login'); // <--- note this
                }
            }
    
            return $next($request);
        }
    }
    

    这在您的AuthController中:

    namespace App\Http\Controllers\Auth;
    class AuthController extends Controller
    {
        protected $loginPath = '/login'; // <--- note this
    
        // ... other properties, constructor, traits, etc 
    }
    

答案 2 :(得分:10)

这是Laravel 5.4解决方案:

app / Exceptions / Handler.php中有一个新的unauthenticated()方法,它处理未经身份验证的用户并重定向到登录路径。

所以改变

((86400 + (7200 - 28800)) % 86400)

return redirect()->guest('login');

答案 3 :(得分:5)

在Laravel 5.6中,转到app / Exceptions文件夹并打开Handler.php,添加一个覆盖未经身份验证的方法的新方法,如下所示:

protected function unauthenticated($request, AuthenticationException $exception)
{
    if($request->ajax())
    {
        return response([
            "message" => "Unauthenticated.",
            "data" => [],
        ],401);
    }

    return redirect()->to('/');
}

使用内置的“auth”中间件访问受保护的路由时会触发此方法。现在,您可以完全控制重定向或发送响应的位置。

答案 4 :(得分:4)

使用Laravel 5中的中间件进行身份验证检查。

auth的中间件是App\Http\Middleware\Authenticate

因此,您可以在中间件的handle方法中更改它。

答案 5 :(得分:3)

编辑:在Laravel 5.1上,只需将 protected $ redirectPath =&#39; / url / you / want&#39 ;; 添加到AuthController即可。

参考:http://laravel.com/docs/5.1/authentication#included-authenticating

在Laravel 5.1上,它完全转移到 App \ Http \ Middleware

下的另一个名为 RedirectIfAuthenticated.php 的中间件
    window.onload = function () {
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    var button = document.getElementsByTagName("button")[0];
    var imageObj = new Image();
    imageObj.onload = function () {
        context.drawImage(imageObj, 0, 0);
        context.font = "40pt Calibri";
        context.fillText("My TEXT!", 50, 100);
        context.font = "20pt Calibri";
        context.fillStyle = "red";
        context.fillText("Tesr", 50, 200);
    };
    imageObj.src = "/path/to/image";

    button.onclick = function (e) {
        var data = canvas.toDataURL();
        var post = new XMLHttpRequest();
        post.open("POST", "/echo/html/");
        post.onload = function (e) {
            console.log(this.responseText)
        };
        post.send("html=" + encodeURIComponent(data));
    };
};

希望它有所帮助。

答案 6 :(得分:0)

由于您的其他question被标记为重复..我会尝试在此处回答..

首先,您需要更改路线,如

<?php
Route::get(config('constants.cms_path') . '/login', [
    'as' => 'login',
    'uses' => 'Auth\AuthController@getLogin'
]);

在您的刀片中...确保您在登录网址链接中使用命名路线,如

{{ route('login') }}

在Middleware / Authenticate.php中,将重定向访客更改为

return redirect()->guest(config('constants.cms_path') . '/login');

答案 7 :(得分:0)

请你输出php artisan route:list

你是对的,你可以设置以下属性:

protected $loginPath = 'xxx';

protected $redirectPath = 'xxx';

protected $redirectAfterLogout = 'xxx';

将此属性设置为AuthController.php

答案 8 :(得分:0)

要在登录后更改重定向,您只需要转到app / Http / Controllers / Auth / LoginController.php并在类LoginController中添加:

protected $redirectTo = '/redirect-url-here';

新用户注册后重定向相同,但在这种情况下,在AuthController.php上

答案 9 :(得分:0)

对于Laravel 5.4您可以设置protected $ redirectTo =&#39; /&#39 ;;在LoginController.php文件中。 或者在RegistersUsers.php文件中你可以

protected function registered(Request $request, $user)
{
    return redirect('tosomeRoute'); 
    //Note: This code will run when
    //The user has been registered
}