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.
Il suffit de remplacer les méthodes showRegistrationForm()
et register()
dans
AuthController
pour Laravel 5.0 - 5.4Auth/RegisterController.php
pour Laravel 5.5public function showRegistrationForm()
{
return redirect('login');
}
public function register()
{
}
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.
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
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.
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 "/".
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.
À 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 .
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.
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.
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.
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.
LAravel 5.6
Auth::routes([
'register' => false, // Registration Routes...
'reset' => false, // Password Reset Routes...
'verify' => false, // Email Verification Routes...
]);
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
.
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!
Je devais utiliser:
public function getRegister()
{
return redirect('/');
}
Utiliser Redirect :: to () m’a donné une erreur:
Class 'App\Http\Controllers\Auth\Redirect' not found
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');
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.
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
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.
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('/');
});
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
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...
]);
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
.
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);
}
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>
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ù.