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?
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.
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.
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
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);
}
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');
}
Je suppose que vous pouvez le faire comme ceci, dans votre fichier web.php:
Route::redirect('register', 'login', 301);
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');
Ajoutez ces deux méthodes à app\Http\Controllers\Auth\RegisterController.php
public function showRegistrationForm(){
return redirect('login');
}
public function register(){
}
É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.