laravel 5.3新增Auth :: routes()


128

最近,我开始使用laravel 5.3编写博客,但是运行后我有一个问题 php artisan make:auth

当我运行它时,它将在 web.php

这是其中的代码:

Auth::routes();

Route::get('/home', 'HomeController@index');

然后我运行php artisan route:list,发现很多动作,例如LoginController @ login ...

但是我没有在我的动作中找到这些动作,这些动作在App\Http\Controllers\Auth哪里?

还有什么Auth::routes()代表,我找不到有关Auth的路线。

我需要别人的帮助,谢谢您回答我的问题


10
我是现在唯一讨厌所有Laravel魔法的人吗?
穆罕默德·乌斯曼(Fuhammad Usman)'18

1
我不介意laravel魔术,如果只记录了它们……并且可以持续不断地工作,而不必在念诵php artisan的时候在服务器周围走动widdershins。
baradhili19年

Laravel的所有内容都不适合开发人员使用,适合想要快速简便地启动新应用程序(甚至其文档)的公司和新手用户。如果可以选择的话,我还是会选择Codeigniter。
BlackPanther

Answers:


214

Auth::routes()只是一个帮助程序类,可帮助您生成用户身份验证所需的所有路由。您可以在这里浏览代码https://github.com/laravel/framework/blob/5.3/src/Illuminate/Routing/Router.php

这是路线

// 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');

2
谢谢!我看到了../Routing/Router.php,现在我知道路由是如何工作的,但是Auth静态方法route()在哪里?我仍然找不到它,请原谅我是幼稚的初学者……
g1eny0ung

4
Auth :: routes方法位于github.com/laravel/framework/blob/5.3/src/Illuminate/Support/…,并且无论如何它都会调用Router函数。如果这对您有帮助,请标记为答案,谢谢。

2
Auth外观,将在中定义。config/app.php您将在该配置文件中找到充当其提供程序的类。
杰森

具有相同但出错的错误:NotFoundHttpException in RouteCollection.php line 161:,并且另一个api运行正常。
151291 '18 -10-26

$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');无法运行Authapi
151291 '18 -10-26

51

这是Laravel 5.7Laravel 5.8Laravel 6.0Laravel 7.0(请注意,在6.0中对电子邮件验证路由进行了小幅更改)。

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

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

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

// Confirm Password (added in v6.2)
Route::get('password/confirm', 'Auth\ConfirmPasswordController@showConfirmForm')->name('password.confirm');
Route::post('password/confirm', 'Auth\ConfirmPasswordController@confirm');

// Email Verification Routes...
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify'); // v6.x
/* Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify'); // v5.x */
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

您可以在此处验证以下路线:


1
正如您的链接所示,确实从5.8到6.x做了很小的变化:电子邮件验证链接的路由应为'email/verify/{id}/{hash}'。否则,将无法验证哈希,并且将引发403错误,提示“此操作未经授权”。
借记

46

验证Laravel 5.3的身份验证路由,而不是Auth :: routes()。希望对您有帮助...

Route::group(['middleware' => ['web']], function() {

// Login Routes...
    Route::get('login', ['as' => 'login', 'uses' => 'Auth\LoginController@showLoginForm']);
    Route::post('login', ['as' => 'login.post', 'uses' => 'Auth\LoginController@login']);
    Route::post('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']);

// Registration Routes...
    Route::get('register', ['as' => 'register', 'uses' => 'Auth\RegisterController@showRegistrationForm']);
    Route::post('register', ['as' => 'register.post', 'uses' => 'Auth\RegisterController@register']);

// Password Reset Routes...
    Route::get('password/reset', ['as' => 'password.reset', 'uses' => 'Auth\ForgotPasswordController@showLinkRequestForm']);
    Route::post('password/email', ['as' => 'password.email', 'uses' => 'Auth\ForgotPasswordController@sendResetLinkEmail']);
    Route::get('password/reset/{token}', ['as' => 'password.reset.token', 'uses' => 'Auth\ResetPasswordController@showResetForm']);
    Route::post('password/reset', ['as' => 'password.reset.post', 'uses' => 'Auth\ResetPasswordController@reset']);
});

因此,如果您更改这些路线的某些名称,请记住也要在视图中更改帖子的操作!


谢谢,但是您不需要'middleware'=> ['web'],因为:开箱即用,Route ServiceProvider自动将Web中间件组应用于您的route / web.php文件。
panjeh

15

对于Laravel 5.5.x

// 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')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');

8

函数调用顺序:

  1. (Auth)Illuminate \ Support \ Facades \ Auth @ routes(https://github.com/laravel/framework/blob/5.3/src/Illuminate/Support/Facades/Auth.php
  2. (App)Illuminate \ Foundation \ Application @ auth
  3. (路由)Illuminate \ Routing \ Router

它的路线是这样的:

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\AuthController@showLoginForm');
    $this->post('login', 'Auth\AuthController@login');
    $this->get('logout', 'Auth\AuthController@logout');
    // Registration Routes...
    $this->get('register', 'Auth\AuthController@showRegistrationForm');
    $this->post('register', 'Auth\AuthController@register');
    // Password Reset Routes...
    $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
    $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
    $this->post('password/reset', 'Auth\PasswordController@reset');
}


该答案实际上为OP提出的问题提供了启示。谢谢@SilentCat。
情人节,

我认为最好用口头解释上述3个步骤会发生什么:-Auth Auth::routes()外观- Router从Laravel容器中检索对象实例并调用其预先存在的方法authauth依次定义由生成的路线及其各自的控制器php artisan make:auth。就是这个。
Valentine Shi

7

这对Laravel 5.6来说对我有用

在文件中web.php,只需替换:

Auth::routes();

通过:

//Auth::routes();
// Authentication Routes...
Route::get('admin/login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('admin/login', 'Auth\LoginController@login');
Route::post('admin/logout', 'Auth\LoginController@logout')->name('logout');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

并删除下面两个文件中的“ 注册”链接:

welcome.blade.php
layouts/app.blade.php

4

如果您在这些相同的路线中搜索laravel 7版本,则会在此处找到它 Vendor/laravel/ui/src/AuthRouteMethods.php


1

我很惊讶没有人提到该命令php artisan route:list,该命令给出了所有已注册应用程序路由的列表(包括Auth::routes()Passport::routes()如果已注册)


0

loginuser类使用一个称为 AuthenticatesUsers

如果打开该特征,您将看到功能(这适用于其他控制器) Illuminate\Foundation\Auth\AuthenticatesUsers;

这是特征码https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

抱歉,格式错误,即时通讯正在使用我的手机

Auth::routes()它也只是调用一个函数返回它的身份验证路由(我认为)


是的,我浏览了Auth /目录,但是找不到方法,例如App \ Http \ Controllers \ Auth \ ResetPasswordController @ showResetForm,在@之后可以在哪里找到方法,我花了很多时间才能找到它,但是现在我也找不到它。我是laravel的
新手。– g1eny0ung

1
这是完整的路径vendor\laravel\src\Illuminate\Foundation\Auth\ResetsPasswords,如果您想更改此内容或其他内容,请不要更改,只需将相同的方法添加到您的控制器中,然后再更改,即可
Achraf Khouadja

@Achraf Khouadja,看来您是laravel大师。我需要你帮忙。看看这里:stackoverflow.com/questions/41047583/...
摩西TOH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.