2017-03-09 157 views
16

我試圖在運行Laravel 5.4的應用程序上禁用寄存器路由。Laravel 5.4禁用寄存器路由

在我的路由文件中,我只有Auth :: routes();

有沒有辦法禁用註冊路由?

回答

28

代碼:

Auth::routes(); 

其對這個集合路線的shorcut:

// Authentication Routes... 
    Route::get('login', 'Auth\[email protected]')->name('login'); 
    Route::post('login', 'Auth\[email protected]'); 
    Route::post('logout', 'Auth\[email protected]')->name('logout'); 

    // Registration Routes... 
    Route::get('register', 'Auth\[email protected]')->name('register'); 
    Route::post('register', 'Auth\[email protected]'); 

    // Password Reset Routes... 
    Route::get('password/reset', 'Auth\[email protected]')->name('password.request'); 
    Route::post('password/email', 'Auth\[email protected]')->name('password.email'); 
    Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset'); 
    Route::post('password/reset', 'Auth\[email protected]'); 

所以,你可以代替先用路由列表和註釋掉你沒有任何途徑想要在你的應用程序中

-3

是的,有一種方法

Auth::routes(); 

遠程從你的路由目錄中的web.php這條路線。

該路由控制註冊。

+0

downvoters這個答案並不完全錯了,其只對了一半 –

+0

如果你這樣做,你會禁用登錄方法也一樣,所以這個答案是錯的! – user2519032

8

你可以試試這個。

Route::match(['get', 'post'], 'register', function(){ 
    return redirect('/'); 
}); 

添加只是Auth::routes()下面這些路線覆蓋默認的註冊途徑。對/register路由的任何請求都將重定向到baseUrl。

+0

禁用'/ login'頁面。 – Jason

+0

工作得很好。簡單解決方案謝謝! – iaforek

1

我想你想限制訪問某些頁面的訪客,只有管理員可以註冊一個訪客。您可以通過添加您自己的中間件上kernel.php文件象下面這樣實現它:

protected $routeMiddleware = [ 
     'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class 
]; 

創建中間件之後,你必須使用它,所以你可以去web.php文件在您的路線是將其添加到路線要限制象下面這樣:

Route::get('register', 'Auth\[email protected]')->name('register')->middleware('authenticated'); 
Route::post('register', 'Auth\[email protected]')->middleware('authenticated'); 

這樣的註冊僅限於客人,但如果他想註冊一些其它管理員管理員仍然能夠訪問該頁面!

不要忘了如下的詳細清單,以取代Auth::routes();

// Authentication Routes... 
Route::get('login', 'Auth\[email protected]')->name('login'); 
Route::post('login', 'Auth\[email protected]'); 
Route::post('logout', 'Auth\[email protected]')->name('logout'); 

// Registration Routes... 
Route::get('register', 'Auth\[email protected]')->name('register')->middleware('authenticated'); 
Route::post('register', 'Auth\[email protected]')->middleware('authenticated'); 

// Password Reset Routes... 
Route::get('password/reset', 'Auth\[email protected]')->name('password.request'); 
Route::post('password/email', 'Auth\[email protected]')->name('password.email'); 
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset'); 
Route::post('password/reset', 'Auth\[email protected]'); 
0

更改路線:

供應商\ laravel \框架的\ src \照亮\路由\路由器。 PHP

public function auth() 
{ 
    // Authentication Routes... 
    $this->get('login', 'Auth\[email protected]')->name('login'); 
    $this->post('login', 'Auth\[email protected]'); 
    $this->post('logout', 'Auth\[email protected]')->name('logout'); 

    // Registration Routes... 
    //$this->get('register', 'Auth\[email protected]')->name('register'); 
    //$this->post('register', 'Auth\[email protected]'); 

    // Password Reset Routes... 
    //$this->get('password/reset', 'Auth\[email protected]')->name('password.request'); 
    //$this->post('password/email', 'Auth\[email protected]')->name('password.email'); 
    //$this->get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset'); 
    //$this->post('password/reset', 'Auth\[email protected]'); 
} 
+0

對供應商文件夾中的任何文件進行更改是最糟糕的主意 –

0

重命名RegisterController任何其他南e或刪除它:-)

0

這看起來很容易!您只需要覆蓋app/Http/Controllers/Auth/RegisterController.php類中的兩種方法。請參閱下文,這將阻止顯示錶單,並且最重要的是阻止直接POST請求到您的註冊申請。

/** 
* Show the application registration form. 
* 
* @return \Illuminate\Http\Response 
*/ 
public function showRegistrationForm() 
{ 
    return redirect('login'); 
} 

/** 
* Handle a registration request for the application. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function register(Request $request) 
{ 
    abort(404); 
} 
1

雖然上述解決方案的工作,但是,我想改變在App\Http\Controllers\Auth\RegisterControllermiddleware'auth'將是最簡單的解決方案之一。如果他們想訪問任何註冊路線,這將把所有訪客重定向到登錄頁面。就像這樣:

namespace App\Http\Controllers\Auth; 
class RegisterController extends Controller 
{ 
    public function __construct() 
    { 
     $this->middleware('auth'); 
    }