web-dev-qa-db-fra.com

Comment désactiver l'inscription nouvel utilisateur dans Laravel 5

J'essaie de créer un panneau d'administration mono-utilisateur (qui ne compte qu'un utilisateur) dans Laravel 5 et je l'ai enregistré. Je souhaite maintenant désactiver l'enregistrement pour les nouveaux utilisateurs. Bien sûr, le formulaire de connexion doit fonctionner, mais aucun nouveau registre ne doit maintenant Comment puis je faire ça?

J'utilise le nom d'utilisateur par défaut et m'inscris dans la version 5.

80
Milad

Il suffit de remplacer les méthodes showRegistrationForm() et register() dans

  • AuthController pour Laravel 5.0 - 5.4
  • Auth/RegisterController.php pour Laravel 5.5
public function showRegistrationForm()
{
    return redirect('login');
}

public function register()
{

}
133
Limon Monte

Si vous utilisez Laravel 5.2 et que vous avez installé la fonctionnalité liée à l'authentification avec php artisan make:auth, votre fichier app/Http/routes.php inclura tous les itinéraires liés à l'authentification en appelant simplement Route::auth()

La méthode auth () peut être trouvée dans vendor/laravel/framework/src/Illuminate/Routing/Router.php. Donc, si vous voulez faire ce que certaines personnes suggèrent ici et désactiver l’enregistrement en supprimant les routes indésirables (probablement une bonne idée), vous devez copier les routes que vous voulez toujours de la méthode auth () et les mettre dans app/Http/routes.php (en remplaçant l’appel à Route :: auth ()). Donc par exemple:

<?php
// This is app/Http/routes.php

// Authentication Routes...
Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');

// Registration Routes... removed!

// Password Reset Routes...
Route::get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
Route::post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
Route::post('password/reset', 'Auth\PasswordController@reset');

Si vous utilisez une version plus basse que la version 5.2, alors c'est probablement différent, je me souviens que les choses ont changé un peu depuis la version 5.0, à un moment donné, artisan make:auth a même été supprimé IIRC.

52
Rafał G.

Pour Laravel 5.3 et 5.4, voici comment procéder:

Vous devez changer:

public function __construct()
    {
        $this->middleware('guest');
    }

à

public function __construct()
    {
        $this->middleware('auth');
    }

dans app/Http/Controller/Auth/RegisterController.php

30
Yassin

Cela peut être nouveau dans la version 5.7, mais il existe maintenant un tableau d’options pour la méthode auth. Remplacer simplement Auth::routes(); par Auth::routes(['register' => false]); dans votre fichier de routes après avoir exécuté php artisan make:auth désactive l'enregistrement de l'utilisateur.

28
theeternalsw0rd

Méthode 1 pour la version 5.3

Dans Laravel 5.3, n’avez pas AuthController . Pour désactiver l’enregistrement de route, vous devez changer le constructeur de RegisterController comme ceci:

Vous pouvez changer de formulaire:

public function __construct()
{

    $this->middleware('guest');

}

à:

use Illuminate\Support\Facades\Redirect;

public function __construct()
{

    Redirect::to('/')->send();

}

Remarque: pour utiliser Redirect, n'oubliez pas de user Redirect; Ainsi, l'accès utilisateur à https: // nom_hôte/register est redirigé vers "/".

Méthode 2 pour la version 5.3

Lorsque nous utilisons php artisan make:auth il est ajouté Auth::route(); Automatiquement . S'il vous plaît écraser la route dans /routes/web.php. Vous pouvez changer c'est comme ceci: * Vous devez commenter cette ligne: Auth::routes();

    <?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
*/


// Auth::routes();
Route::get('/login', 'Auth\LoginController@showLoginForm' );
Route::post('/login', 'Auth\LoginController@login');
Route::post('/logout', 'Auth\LoginController@logout');

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

Merci! J'espère que cela peut résoudre vos problèmes.

26
Phanith Kung

À partir de Laravel 5.7, vous pouvez transmettre un tableau d’options à Auth::routes(). Vous pouvez ensuite désactiver les itinéraires de registre avec:

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

Vous pouvez voir comment cela fonctionne à partir du code source: src/Illuminate/Routing/Router.php .

15
Christopher Geary

Remplacer getRegister et postRegister est une opération délicate. Si vous utilisez git, il est très probable que .gitignore soit configuré pour ignorer les fichiers de structure, ce qui aura pour conséquence que l'enregistrement sera toujours possible dans votre environnement de production (si laravel est installé via Exemple)

Une autre possibilité est d'utiliser routes.php et d'ajouter cette ligne:

Route::any('/auth/register','HomeController@index');

De cette façon, les fichiers de cadre restent seuls et toute demande sera toujours redirigée hors du module de registre de Frameworks.

11
JCoolinger

AuthController.php @limonte a écraser est dans App\Http\Controllers\Auth, pas dans le répertoire du fournisseur, donc Git n'ignore pas ce changement.

J'ai ajouté ces fonctions: 

public function register() {
    return redirect('/');
}

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

et cela fonctionne correctement.

9
Jesús Amieiro

Voici ma solution à partir de 5.4:

//Auth::routes();
// 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');

Remarquez que j'ai commenté Auth::routes() et les deux routes d'enregistrement.

Important: vous devez également vous assurer que vous supprimez toutes les instances de route('register') dans votre structure app.blade, sinon Laravel émettra une erreur.

9
kjdion84

La méthode suivante fonctionne très bien:

Copiez toutes les routes de /vendor/laravel/framework/src/Illuminate/Routing/Router.php et collez-les dans web.php et commentez ou supprimez Auth :: routes ().

Configurez ensuite une condition permettant d'activer et de désactiver l'enregistrement à partir du fichier .env . Dupliquez le fichier 503.blade.php dans les affichages/erreurs et créez un 403 interdit ou ce que vous aimez.

Ajoutez ALLOW_USER_REGISTRATION = à .env et contrôlez l'enregistrement des utilisateurs en définissant sa valeur sur true ou sur false.

Vous avez maintenant le contrôle total des itinéraires et les fichiers du fournisseur ne sont pas modifiés.

web.php

//Auth::routes();

// 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...
if (env('ALLOW_USER_REGISTRATION', true))
{
    Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
    Route::post('register', 'Auth\RegisterController@register');
}
else
{
    Route::match(['get','post'], 'register', function () {
        return view('errors.403');
    })->name('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');

Ceci est une combinaison de réponses précédentes, notamment Rafal G. et Daniel Centore. 

7
Jeffrey

LAravel 5.6

Auth::routes([
    'register' => false, // Registration Routes...
    'reset' => false, // Password Reset Routes...
    'verify' => false, // Email Verification Routes...
]);
6
Isaac Limón

Dans routes.php, ajoutez simplement ce qui suit:

if (!env('ALLOW_REGISTRATION', false)) {
    Route::any('/register', function() {
        abort(403);
    });
}

Ensuite, vous pouvez contrôler de manière sélective si l’enregistrement est autorisé ou non dans votre fichier .env.

5
Daniel Centore

Dans Laravel 5.4

Vous pouvez trouver tous les itinéraires enregistrés via Auth::routes() dans la classe \Illuminate\Routing\Router dans la méthode auth().

ça ressemble à ça:

/**
 * Register the typical authentication routes for an application.
 *
 * @return void
 */
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');
}

Il suffit de copier les itinéraires que vous souhaitez/avez besoin et tout va bien!

4
bambamboole

Je devais utiliser:

public function getRegister()
{
    return redirect('/');
}

Utiliser Redirect :: to () m’a donné une erreur:

Class 'App\Http\Controllers\Auth\Redirect' not found
3
ghodder

Dans Laravel 5.5

J'essayais d'accomplir le même problème dans Laravel 5.5. Au lieu d'utiliser Auth::routes() dans le fichier de routes web.php, j'ai uniquement inclus les routes de connexion/déconnexion:

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
3
David Angel

Dans laravel 5.3, vous devez remplacer la showRegistrationForm() par défaut en incluant le code ci-dessous dans le fichier RegisterController.php dans app\Http\Controllers\Auth

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        //return view('auth.register');
         abort(404);  //this will throw a page not found exception
    }

puisque vous ne voulez pas autoriser l'enregistrement, il est préférable de lancer simplement 404 error pour que l'intrus sache qu'il est perdu. Et lorsque vous êtes prêt pour l'enregistrement dans votre application, décommentez //return view('auth.register'); puis commentez abort(404);.

\\\\\\\\\\\\\\\\\\\\\ JUST AN FYI ////////////////////////// ////

Si vous devez utiliser une authentification multiple telle que create auth pour les utilisateurs, les membres, les étudiants, l’administrateur, etc., je vous conseille de commander ceci hesto/multi-auth , c’est un package génial pour des autorisations illimitées dans les applications L5.

Vous pouvez en savoir plus sur la méthodologie d’authentification et son fichier associé dans this writer.

2
The Dead Guy

Sur laravel 5.6 et supérieur, vous pouvez éditer dans web.php file

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

et vous pouvez le rendre vrai si vous changez d'avis, je le vois facilement de cette façon

2
Sajjad Aljileezi

Dans Laravel 5.5

Travailler sur un problème similaire et régler l'argument du middleware de guest à 'auth' semblait une solution plus élégante. 

Editer le fichier: app-> http-> Contrôleurs-> Auth-> RegisterController.php

public function __construct()
{
     //replace this
     //$this->middleware('guest');

     //with this argument.
       $this->middleware('auth');
}

Je peux toutefois me tromper ... mais cela semble plus simple que de modifier le routage avec plus de lignes et moins de merde que de rediriger simplement la page ... du moins dans ce cas, souhaitant verrouiller l'enregistrement des invités.

1
Chad Quilter

J'ai trouvé que c'était la solution la plus simple dans laravel 5.6! Il redirige toute personne qui tente d'accéder à yoursite.com/register vers yoursite.com

routes/web.php

// redirect from register page to home page
Route::get('/register', function () {
    return redirect('/');
});
1
Ryan Dhungel

Je n'ai fait que remplacer le code de la lame de registre par le code de la lame de connexion. De cette façon, inscrivez-vous quand même pour vous connecter.

resources/views/auth/register.blade.php est remplacé par resources/views/auth/login.blade.php

1
Akula

Cela a été mentionné dans des commentaires précédents, mais je voudrais préciser qu'il existe plusieurs façons d'accéder aux routes d'authentification dans votre fichier web.php dans Laravel ^ 5.7. selon votre version, cela peut paraître un peu différent, mais ils obtiennent le même résultat.

Première option

Route::auth([
  'register' => false, // Registration Routes...
  'reset' => false, // Password Reset Routes...
  'verify' => false, // Email Verification Routes...
]);

Deuxième option

Auth::routes([
  'register' => false, // Registration Routes...
  'reset' => false, // Password Reset Routes...
  'verify' => false, // Email Verification Routes...
]);
1
Edvard Åkerberg

Pour Laravel 5.6+, collez les méthodes ci-dessous dans app\Http\Controller\Auth\RegisterController

/*
* Disabling registeration.
*
*/
public function register() 
{
    return redirect('/');
}

/*
* Disabling registeration.
*
*/
public function showRegistrationForm() 
{
    return redirect('/');
}

Maintenant, vous remplacez ces méthodes dans le trait RegistersUser, chaque fois que vous changez d'avis, supprimez ces méthodes. Vous pouvez également commenter les liens de registre dans les vues welcome.blade.php et login.blade.php.

1
Yamen Ashraf

Je suppose que ce serait plutôt une meilleure solution.

Remplacez les méthodes suivantes mentionnées ci-dessous dans 

App\Http\Controller\Auth\RegisterController.php

use Illuminate\Http\Response;

.
.
.

public function showRegistrationForm()
{
    abort(Response::HTTP_NOT_FOUND);
}

public function register(Request $request)
{
    abort(Response::HTTP_NOT_FOUND);
}
1
Vaishnav Mhetre

Dans Laravel 5.5 est très simple, si vous utilisez le système de route CRUD.

Allez à app/http/controllers/RegisterController il y a un espace de noms: Illuminate\Foundation\Auth\RegistersUser

Vous devez aller à RegistersUser: Illuminate\Foundation\Auth\RegistersUser

Il y a l'appel de méthode showRegistrationForm changer ceci: return view('auth.login'); pour ceci: return redirect()->route('auth.login'); et supprimer de votre registre d'appels de route de page de lame Cela peut ressembler à ça:

 <li role="presentation">
     <a class="nav-link" href="{{ route('register') }}">Register</a>
 </li> 
0
macalu

Afin de ne pas trop changer le code tel quel, créez simplement un middleware pour détecter si l'URL de la requête est url ('register'), puis redirigez-le vers 404 ou faites-le n'importe où.

0
Integral Master