php 覆盖 Laravel >= 5.4 中的默认 Auth 路由

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43224300/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 02:48:02  来源:igfitidea点击:

Override default Auth routes in Laravel >= 5.4

phplaravellaravel-5

提问by Kiren Siva

I want to override /loginroute to /admin/login. In web.phpI tried

我想覆盖/login/admin/login. 在web.php我试过

//Auth::routes();
Route::get('login', ['as' => 'auth.login', 'uses' => 'App\Modules\Admin\Controllers\AdminUserController@loginAdminUser'])->name('login');

But it is still showing Laravel default login form. How can I do this?

但它仍然显示 Laravel 默认登录表单。我怎样才能做到这一点?

回答by Gordon Freeman

For the googlers, here is a full list of routes that are getting generated by Auth::routes();in Laravel >= 5.4

对于 googlers,这里是Auth::routes();在 Laravel >= 5.4 中生成的路由的完整列表

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

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

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

php artisan route:listwill return

php artisan route:list将返回

+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method   | URI                    | Name             | Action                                                                 | Middleware   |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
|        | GET|HEAD | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
|        | POST     | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
|        | POST     | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
|        | POST     | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest    |
|        | GET|HEAD | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest    |
|        | POST     | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest    |
|        | GET|HEAD | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest    |
|        | GET|HEAD | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
|        | POST     | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+--------------+

回答by Asim Shahzad

You can also try this one.

你也可以试试这个。

// Replace admin with whatever prefix you need

Route::group(['prefix' => 'admin'], function () {

    Auth::routes();

});

You can see list of routes by following command.

您可以通过以下命令查看路由列表。

php artisan route:list

php artisan route:list

enter image description here

在此处输入图片说明

回答by Lucas Bustamante

Routes for 5.5 LTS(Confirmed) / 5.6(Confirmed) / 5.7(?)

对于路由5.5 LTS(确认)/ 5.6(确认)/ 5.7(?)

Can someone confirm it works with 5.7?

有人可以确认它适用于 5.7 吗?

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

回答by raviolican

As I was struggling with the same problem I managed to find a good way to overridelaravel 5.5routes:

当我遇到同样的问题时,我设法找到了一种覆盖laravel 5.5路由的好方法:

The static function Auth::routes(); :

静态函数 Auth::routes(); :

public static function routes()
{
    static::$app->make('router')->auth();
}

The auth() function is called here which creates auth routes:

auth() 函数在这里被调用,它创建了 auth 路由:

laravel/framework/src/Illuminate/Routing/Router.php

laravel/framework/src/Illuminate/Routing/Router.php

public function auth()
{
    // 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');
}

You can copy&paste the body of the function right into your web.php and modify them as you wish.

您可以将函数的主体复制并粘贴到您的 web.php 中,并根据需要进行修改。

回答by Buraco

You can find all the login routes of Laravel 5.7. There is something new, e-mail verification. Related documentation is here.

你可以找到Laravel 5.7的所有登录路径。有一些新的东西,电子邮件验证。相关文档在这里

If statements in the code block basically enables/disables auth features. By using helper, you can pass register, reset, verifyparameters to Auth::routes(['verify' => true]);. So fix ifstatements by using config()or just use as you wish.

代码块中的 if 语句基本上启用/禁用身份验证功能。通过使用助手,您可以将register, reset,verify参数传递给Auth::routes(['verify' => true]);。因此,if通过使用config()或随意使用来修复语句。

Wrapping up here!
When you call Auth::routes(), following routes will be registered.

到此结束!
当您拨打 时Auth::routes(),将注册以下路线。

Route::get('login', 'LoginController@showLoginForm')->name('login');
Route::post('login', 'LoginController@login');
Route::post('logout', 'LoginController@logout')->name('logout');

// Registration Routes...
if (config('register'))
{
    Route::get('register', 'RegisterController@showRegistrationForm')->name('register');
    Route::post('register', 'RegisterController@register');
}
// Password Reset Routes...
if (config('reset'))
{
    Route::get('password/reset', 'ForgotPasswordController@showLinkRequestForm')->name('password.request');
    Route::post('password/email', 'ForgotPasswordController@sendResetLinkEmail')->name('password.email');
    Route::get('password/reset/{token}', 'ResetPasswordController@showResetForm')->name('password.reset');
    Route::post('password/reset', 'ResetPasswordController@reset')->name('password.update');
}
// Email Verification Routes...
if (config('verify'))
{
    Route::get('email/verify', 'VerificationController@show')->name('verification.notice');
    Route::get('email/verify/{id}', 'VerificationController@verify')->name('verification.verify');
    Route::get('email/resend', 'VerificationController@resend')->name('verification.resend');
}

回答by Pankit Gami

Change this to :

将此更改为:

Route::get('/admin/login', ['as' => 'admin.login', 'uses' => 'App\Modules\Admin\Controllers\AdminUserController@loginAdminUser']);

    Route::get('login', ['as' => 'login', 'uses' => 'App\Modules\Admin\Controllers\AdminUserController@loginAdminUser']);

namefunction is the synonyms for askey of array. So no need to add nameat the end.

name函数是as数组键的同义词。所以没有必要name在最后添加。