web-dev-qa-db-fra.com

Laravel 5.4 Désactiver Enregistrer l'itinéraire

J'essaie de désactiver la route d'enregistrement sur mon application qui s'exécute dans Laravel 5.4.

Dans mon fichier de routes, je n'ai que le

Auth::routes();

Est-il possible de désactiver les itinéraires de registre?

27
Dev.Wol

Le code:

 Auth::routes();

c'est un raccourci pour cette collection d'itinéraires:

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

Vous pouvez donc remplacer le premier par la liste des itinéraires et commenter tout itinéraire que vous ne souhaitez pas dans votre application.

56
dparoli

Vous pouvez essayer ceci. 

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

Ajoutez ces routes juste en dessous de Auth::routes() pour remplacer les routes d'enregistrement par défaut. Toute demande à la route /register sera redirigée vers la baseUrl. 

18
Elvis Mugabi

Depuis Laravel 5.0, vous pouvez simplement passer et tableau avec des options

Auth::routes(['register' => false]);

Vous pouvez consulter le code Illuminate\Routing\Router @ auth

16
Irwing Reza

C'est trompeusement facile! Il vous suffit de remplacer deux méthodes dans votre classe app/Http/Controllers/Auth/RegisterController.php. Voir ci-dessous qui empêchera l'affichage du formulaire et, surtout, bloquera les demandes directes POST à votre demande d'enregistrement.

/**
 * 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);
}
7
Snaver

Bien que les solutions ci-dessus fonctionnent, mais je pense que changer la middleware en 'auth' dans le App\Http\Controllers\Auth\RegisterController sera l’une des solutions les plus simples. Cela redirigera tous les visiteurs vers la page de connexion s’ils souhaitent accéder aux itinéraires d’enregistrement. Comme ça:

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

Je suppose que vous pouvez le faire comme ceci, dans votre fichier web.php:

Route::redirect('register', 'login', 301);
2
Evan

Je suppose que vous souhaitez limiter l'accès à certaines pages aux invités et que seul l'administrateur peut enregistrer un invité. Vous pouvez y arriver en ajoutant votre propre middleware au fichier kernel.php comme ci-dessous:

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

Après avoir créé le middleware, vous devez l’utiliser pour pouvoir accéder au fichier web.php où se trouvent vos routes et l’ajouter à la route à limiter, comme ci-dessous:

Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');

De cette façon, l'enregistrement est limité aux invités, mais l'administrateur peut toujours accéder à la page s'il souhaite enregistrer un autre administrateur!

N'oubliez pas de remplacer le Auth::routes(); par la liste détaillée ci-dessous:

// 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')->middleware('authenticated');
Route::post('register', 'Auth\RegisterController@register')->middleware('authenticated');

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

Ajoutez ces deux méthodes à app\Http\Controllers\Auth\RegisterController.php

public function showRegistrationForm(){
    return redirect('login');
}

public function register(){

}
0
sachin

Écrasez simplement votre auth showRegistrationForm () method (placez ce code dans votre Auth/RegisterController )

public function showRegistrationForm() { return redirect()->route('login'); }

Je suis simplement en train de rediriger mon itinéraire d'enregistrement pour vous connecter à un itinéraire. Ici, vous n'avez pas besoin d'ajouter ou de supprimer un autre code.

0
Manu Joseph