Laravel - 中间件如何将路由更改为除登录以外的所需页面

时间:2017-08-06 06:47:59

标签: php laravel laravel-5.3 middleware

我正在研究新的laravel项目。

我已经通过composer安装了laravel框架,然后我创建了一个测试目的的路径:

Route::get('/', function () {
return view('pages.home');
 });

这很好用,我得到了理想的页面。现在为了解中间件我添加了这行代码:

Route::get('/', function () {
return view('pages.home');
 })->middleware('auth');

现在它的投掷错误

Route [login] not defined.

我所知道的,它抛出了这个错误,因为我没有安装任何voyagers包,这就是为什么它没有找到'login'路线。

但我的问题是如何将Route [login]更改为我想要的页面Route [pages.notauth]

请帮助我。

3 个答案:

答案 0 :(得分:1)

首先运行php artisan make:auth以制作Laravel auth样板文件。然后在LoginController中添加以下内容:

class LoginController extends Controller {
    use AuthenticatesUsers;
    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function showLoginForm() {
           return view("pages.notlogin");
     }


 }

答案 1 :(得分:1)

您收到消息Route [login] not defined.并不是因为您没有安装Voyager软件包,而是因为您没有为一般认证创建或定义任何路由。

是的,如果您安装Voyager软件包,那么错误消息将会消失,因为软件包本身将创建必要的auth路由和控制器。

为了做到这一点,你必须在命令行中运行php artisan make:auth

在laravel 5.4中,所有中间件都已在

中注册
app\Http\Kernel.php 

在文件中,您会看到

protected $ routeMiddleware = [     'auth'=> \照亮\验证\中间件\身份验证::类,

所有与身份验证相关的任务都由\Illuminate\Auth\Middleware\Authenticate类处理。因此,如果您想要更改auth中间件的基本行为,那么您需要扩展此类。

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as BaseAuthenticator;

class Authenticate extends BaseAuthenticator
{
    protected function authenticate(array $guards)
    {
        // TO DO: do your desired change
    }
}

答案 2 :(得分:0)

尝试添加

Auth::routes();

在您的路径文件中摆脱该错误,Auth::routes()只是一个帮助程序类,可帮助您生成用户身份验证所需的所有路由。

如果你想更改网址,请改为添加,然后根据需要进行更改:

// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');