Cara menonaktifkan pendaftaran pengguna baru di Laravel
130
Saya menggunakan Laravel (v5).
Saya perlu satu pengguna dan saya sudah mendaftarkannya. Sekarang saya ingin menonaktifkan pendaftaran untuk pengguna baru. Tentu saja, saya perlu formulir login untuk berfungsi.
Hapus saja metode yang berhubungan dengan register dari file route.php Anda . Jangan menimpa metode dengan yang kosong — ini adalah pendekatan yang mengerikan dan hack-y karena Anda harus menambahkan kembali badan jika Anda memutuskan untuk mengaktifkan kembali fitur itu di masa depan.
Martin Bean
1
@MartinBean tidak ada rute di routes.php. Untuk mengaktifkan fungsi otentikasi, yang Anda lakukan hanyalah menambahkan Route::auth();ke file.
miken32
@ miken32 Komentar saya berasal dari lebih dari lima bulan yang lalu, sebelum jalan Route::auth()pintas disarankan.
Martin Bean
5
jika Anda berada di laravel 5.5 dan Auth::routes(['register' => false]);di atasnya di web.php
Mungkin bijaksana untuk juga mengubah fungsi create () untuk: membuang Pengecualian baru ('Registrasi tidak memungkinkan');
JinX
2
atau Anda dapat menambahkan abort(404)padafunction register()
William Notowidagdo
3
Saya tidak akan menganjurkan pendekatan ini, karena kode kelebihan untuk menghapus fitur tidak pernah merupakan hal yang baik. Hanya saja, jangan mendaftar rute terkait pendaftaran.
Martin Bean
4
Untuk Laravel 5.5, masukkan ini ke dalamAuth/RegisterController.php
kapoko
7
Dalam showRegistrationForm()fungsi Laravel 5.7 ada di vendorfolder, secara teknis tidak disarankan untuk mengedit file di folder vendor. Pada dasarnya yang saya rekomendasikan adalah menghapus rute register dari web.php. Anda cukup mengatakan Auth::routes(['register' => false])dalam web.phpfile. Bersulang!
Ahamed Rasheed
55
Jika Anda menggunakan Laravel 5.2 dan Anda menginstal fungsionalitas auth terkait dengan php artisan make:authmaka app/Http/routes.phpfile Anda akan mencakup semua rute auth terkait dengan hanya memanggil Route::auth().
Metode auth () dapat ditemukan di vendor/laravel/framework/src/Illuminate/Routing/Router.php. Jadi jika Anda ingin melakukan seperti yang disarankan beberapa orang di sini dan menonaktifkan pendaftaran dengan menghapus rute yang tidak diinginkan (mungkin ide yang bagus) maka Anda harus menyalin rute yang masih Anda inginkan dari metode auth () dan memasukkannya ke dalam app/Http/routes.php(mengganti panggilan ke Rute :: auth ()). Jadi misalnya:
<?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');
Jika Anda menggunakan versi yang lebih rendah dari 5.2 maka itu mungkin berbeda, saya ingat hal-hal berubah sedikit sejak 5.0, di beberapa titik artisan make:authbahkan dihapus IIRC.
Pertama-tama, saya mencoba Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });, tetapi ketika pengguna yang login meminta /registerdia dialihkan ke/
Sefran2
1
@ Sefran2 Itu karena panggilan AuthController (melalui kelas dan sifat lain, ini sedikit berbelit-belit) middleware App\Http\Middleware\RedirectIfAuthenticated. Dan middleware itu mengarahkan Anda ke /jika Anda sudah masuk. Yang masuk akal, mengapa Anda ingin mendaftar jika Anda masuk? :-) Jika Anda hanya ingin membolehkan beberapa rute ke beberapa jenis pengguna, Anda harus membuat middleware sendiri, bukan['middleware' => 'auth']
Rafał G.
2
Untuk 5.3 mereka berbeda sekali lagi, tetapi masih dapat ditemukan di vendor / laravel / framework / src / Illuminate / Routing / Router.php
Matthieu
51
Ini mungkin baru di 5.7, tetapi sekarang ada array opsi untuk metode auth. Cukup berubah
Auth::routes();
untuk
Auth::routes(['register'=>false]);
dalam file rute Anda setelah berjalan php artisan make:authakan menonaktifkan pendaftaran pengguna.
Catatan: untuk digunakan Redirect jangan lupa untuk user Redirect;
Jadi akses pengguna ke https: // host_name / register itu dialihkan ke "/".
Metode 2 untuk versi 5.3
Ketika kami menggunakannya php artisan make:authditambahkan Auth::route();
secara otomatis. Silakan Ganti Rute di /routes/web.php. Anda dapat mengubahnya seperti ini: * Anda perlu mengomentari baris ini: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');
Terima kasih! Saya harap ini bisa menyelesaikan masalah Anda.
Saya akan menambahkan nama rute seperti yang ditentukan di vendor / laravel / framework / src / Illuminate / Routing / Router.php Route :: get ('login', 'Auth \ LoginController @ showLoginForm') -> name ('login'); Rute :: pos ('login', 'Auth \ LoginController @ login'); Rute :: pos ('logout', 'Auth \ LoginController @ logout') -> nama ('logout');
Luciano Fantuzzi
Redirect class tidak terjawab pada metode pertama, tetapi berubah menjadi $this->middleware('auth');- works!
Gediminas
12
Menimpa getRegister dan postRegister itu rumit - jika Anda menggunakan git ada kemungkinan besar yang .gitignorediatur untuk mengabaikan file kerangka kerja yang akan mengarah pada hasil bahwa pendaftaran masih akan dimungkinkan di lingkungan produksi Anda (jika laravel diinstal melalui komposer misalnya )
Kemungkinan lain adalah menggunakan routes.php dan menambahkan baris ini:
Kelas-kelas yang mengesampingkan metode kerangka tidak ada dalam kerangka kerja (mereka akan berada di folder aplikasi) dan akan disimpan oleh git. Metode penggantian tidak berarti Anda mengubahnya dalam file kerangka kerja.
datashaman
11
The AuthController.php@limonte memiliki ditimpa dalam App\Http\Controllers\Auth, tidak di direktori penjual, sehingga Git tidak mengabaikan perubahan ini.
Perhatikan saya sudah berkomentar Auth::routes()dan dua rute pendaftaran.
Penting: Anda juga harus memastikan Anda menghapus semua instance route('register')dalam app.bladetata letak Anda , atau Laravel akan melempar kesalahan.
^ ini. Jika rute ini pernah berubah, cukup salin / tempel dari bundel rute Auth yang berada di @ github.com/laravel/framework/blob/… dan berikan komentar pada rute pendaftaran.
pbond
7
Metode berikut berfungsi dengan baik:
Salin semua rute dari /vendor/laravel/framework/src/Illuminate/Routing/Router.phpdan tempel ke dalam web.phpdan komentari atau hapus Auth::routes().
Kemudian mengatur persyaratan untuk mengaktifkan dan menonaktifkan pendaftaran dari .env. Gandakan 503.blade.phpfile views/errorsdan buat 403 terlarang atau apa pun yang Anda suka.
Tambahkan ALLOW_USER_REGISTRATION=ke .env dan kendalikan pendaftaran pengguna dengan menetapkan nilainya ke true atau false.
Sekarang Anda memiliki kendali penuh atas rute dan file Vendor tetap tidak tersentuh.
Terima kasih, ya ini adalah fitur versi baru, Anda dapat menggunakan fungsi ini atau menggunakan kelas sebelumnya, tetapi kelas sebelumnya membutuhkan \ sebelum itu, maksud saya \ Redirect :: to ('destination');
Milad Rahimi
3
Dalam Laravel 5.4
Anda dapat menemukan semua rute yang terdaftar Auth::routes()di kelas \Illuminate\Routing\Routerdalam metode iniauth()
Di laravel 5.3, Anda harus mengganti default showRegistrationForm()dengan memasukkan kode di bawah ini ke dalam RegisterController.phpfileapp\Http\Controllers\Auth
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/publicfunction showRegistrationForm(){//return view('auth.register');
abort(404);//this will throw a page not found exception}
karena Anda tidak ingin mengizinkan pendaftaran, lebih baik membuang 404 errorbegitu saja sehingga si penyusup tahu dia tersesat. Dan ketika Anda siap untuk registrasi di aplikasi Anda, batalkan komentar //return view('auth.register');lalu komentarabort(404);
HANYA FYI /////////////////////////// ////
Jika Anda perlu menggunakan beberapa otentikasi seperti membuat auth untuk pengguna, anggota, siswa, admin, dll. Maka saya menyarankan Anda checkout ini hesto / multi-auth itu paket yang luar biasa untuk auths tak terbatas di aplikasi L5.
Anda dapat membaca lebih lanjut tentang metodologi Auth dan file yang terkait dalam penulisan ini .
Anda juga perlu menambal rute pos sehingga untuk menghindari pendaftaran pengguna melalui permintaan pos.
Vaishnav Mhetre
2
Dalam Laravel 5.5
Saya mencoba menyelesaikan masalah yang sama di Laravel 5.5. Alih-alih menggunakan Auth::routes()dalam file rute web.php, saya hanya menyertakan rute login / logout:
Ini telah disebutkan dalam komentar sebelumnya tetapi saya ingin mengklarifikasi bahwa ada beberapa cara untuk mengakses rute auth di file web.php Anda di Laravel ^ 5.7. tergantung pada versi Anda mungkin terlihat sedikit berbeda tetapi mereka mencapai hasil yang sama.
Agar tidak terlalu mengubah kodenya, buat saja middleware untuk mendeteksi apakah url permintaan adalah url ('register'), lalu redirect ke 404 atau lakukan di mana saja.
publicfunction __construct(){//replace this//$this->middleware('guest');//with this argument.
$this->middleware('auth');}
Saya bisa saja salah ... tetapi tampaknya lebih apik daripada mengedit perutean dengan lebih banyak baris dan lebih sedikit shity daripada hanya mengarahkan ulang halaman ... setidaknya dalam hal ini, ingin mengunci pendaftaran untuk tamu.
Saya ingin tahu apakah pengguna dapat mendaftar beberapa kali menggunakan metode ini. yang guestmiddleware adalah mengarahkan jawab yang sudah login pengguna dari halaman yang hanya tamu bisa akses (yaitu /registerhalaman)
Kingsley
0
Saya kira ini lebih baik menjadi solusi yang lebih baik.
Ganti metode berikut seperti yang disebutkan di dalam
Di Laravel 5.5 sangat sederhana, jika Anda menggunakan sistem rute CRUD.
Pergi ke app/http/controllers/RegisterController sana adalah namespace:Illuminate\Foundation\Auth\RegistersUser
Anda harus pergi ke RegistersUser: Illuminate\Foundation\Auth\RegistersUser
Ada metode panggilan showRegistrationFormubah ini: return view('auth.login');untuk ini: return redirect()->route('auth.login');dan hapus dari Anda register panggilan rute halaman blade. Mungkin terlihat seperti itu:
Sekarang Anda RegistersUsermengganti metode-metode tersebut dalam sifat, setiap kali Anda berubah pikiran, hapus metode-metode ini. Anda juga dapat mengomentari tautan welcome.blade.phpdan login.blade.phptampilan daftar.
routes.php
. Untuk mengaktifkan fungsi otentikasi, yang Anda lakukan hanyalah menambahkanRoute::auth();
ke file.Route::auth()
pintas disarankan.Auth::routes(['register' => false]);
di atasnya di web.phpJawaban:
Laravel 5.7 memperkenalkan fungsi berikut:
Opsi yang saat ini dimungkinkan di sini adalah:
Untuk versi Laravel yang lebih lama cukup timpa
showRegistrationForm()
danregister()
metode dalamAuthController
untuk Laravel 5.0 - 5.4Auth/RegisterController.php
untuk Laravel 5.5sumber
abort(404)
padafunction register()
Auth/RegisterController.php
showRegistrationForm()
fungsi Laravel 5.7 ada divendor
folder, secara teknis tidak disarankan untuk mengedit file di folder vendor. Pada dasarnya yang saya rekomendasikan adalah menghapus rute register dariweb.php
. Anda cukup mengatakanAuth::routes(['register' => false])
dalamweb.php
file. Bersulang!Jika Anda menggunakan Laravel 5.2 dan Anda menginstal fungsionalitas auth terkait dengan
php artisan make:auth
makaapp/Http/routes.php
file Anda akan mencakup semua rute auth terkait dengan hanya memanggilRoute::auth()
.Metode auth () dapat ditemukan di
vendor/laravel/framework/src/Illuminate/Routing/Router.php
. Jadi jika Anda ingin melakukan seperti yang disarankan beberapa orang di sini dan menonaktifkan pendaftaran dengan menghapus rute yang tidak diinginkan (mungkin ide yang bagus) maka Anda harus menyalin rute yang masih Anda inginkan dari metode auth () dan memasukkannya ke dalamapp/Http/routes.php
(mengganti panggilan ke Rute :: auth ()). Jadi misalnya:Jika Anda menggunakan versi yang lebih rendah dari 5.2 maka itu mungkin berbeda, saya ingat hal-hal berubah sedikit sejak 5.0, di beberapa titik
artisan make:auth
bahkan dihapus IIRC.sumber
Route::group(['middleware' => 'auth'], function () { Route::get('register', 'Auth\AuthController@showRegistrationForm'); Route::post('register', 'Auth\AuthController@register'); });
, tetapi ketika pengguna yang login meminta/register
dia dialihkan ke/
App\Http\Middleware\RedirectIfAuthenticated
. Dan middleware itu mengarahkan Anda ke/
jika Anda sudah masuk. Yang masuk akal, mengapa Anda ingin mendaftar jika Anda masuk? :-) Jika Anda hanya ingin membolehkan beberapa rute ke beberapa jenis pengguna, Anda harus membuat middleware sendiri, bukan['middleware' => 'auth']
Ini mungkin baru di 5.7, tetapi sekarang ada array opsi untuk metode auth. Cukup berubah
untuk
dalam file rute Anda setelah berjalan
php artisan make:auth
akan menonaktifkan pendaftaran pengguna.sumber
Untuk Laravel 5.3 dan 5.4, inilah cara yang tepat untuk melakukannya:
Anda harus berubah:
untuk
di app / Http / Controller / Auth / RegisterController.php
sumber
Pada Laravel 5.7 Anda dapat melewatkan array opsi ke
Auth::routes()
. Anda kemudian dapat menonaktifkan rute register dengan:Anda dapat melihat cara kerjanya dari kode sumber: src / Illuminate / Routing / Router.php .
sumber
Metode 1 untuk versi 5.3
Di laravel 5.3 tidak memiliki AuthController. untuk menonaktifkan register route Anda harus mengubah dalam konstruktor
RegisterController
seperti ini:Anda dapat mengubah formulir:
untuk:
Catatan: untuk digunakan
Redirect
jangan lupa untukuser Redirect;
Jadi akses pengguna ke https: // host_name / register itu dialihkan ke "/".Metode 2 untuk versi 5.3
Ketika kami menggunakannya
php artisan make:auth
ditambahkanAuth::route();
secara otomatis. Silakan Ganti Rute di /routes/web.php. Anda dapat mengubahnya seperti ini: * Anda perlu mengomentari baris ini:Auth::routes();
Terima kasih! Saya harap ini bisa menyelesaikan masalah Anda.
sumber
$this->middleware('auth');
- works!Menimpa getRegister dan postRegister itu rumit - jika Anda menggunakan git ada kemungkinan besar yang
.gitignore
diatur untuk mengabaikan file kerangka kerja yang akan mengarah pada hasil bahwa pendaftaran masih akan dimungkinkan di lingkungan produksi Anda (jika laravel diinstal melalui komposer misalnya )Kemungkinan lain adalah menggunakan routes.php dan menambahkan baris ini:
Dengan cara ini file kerangka dibiarkan sendiri dan permintaan apa pun masih akan dialihkan dari modul register Kerangka.
sumber
The
AuthController.php
@limonte memiliki ditimpa dalamApp\Http\Controllers\Auth
, tidak di direktori penjual, sehingga Git tidak mengabaikan perubahan ini.Saya telah menambahkan fungsi ini:
dan itu bekerja dengan benar.
sumber
LAravel 5.6
sumber
Inilah solusi saya pada 5.4:
Perhatikan saya sudah berkomentar
Auth::routes()
dan dua rute pendaftaran.Penting: Anda juga harus memastikan Anda menghapus semua instance
route('register')
dalamapp.blade
tata letak Anda , atau Laravel akan melempar kesalahan.sumber
Metode berikut berfungsi dengan baik:
Salin semua rute dari
/vendor/laravel/framework/src/Illuminate/Routing/Router.php
dan tempel ke dalamweb.php
dan komentari atau hapusAuth::routes()
.Kemudian mengatur persyaratan untuk mengaktifkan dan menonaktifkan pendaftaran dari .env. Gandakan
503.blade.php
fileviews/errors
dan buat 403 terlarang atau apa pun yang Anda suka.Tambahkan
ALLOW_USER_REGISTRATION=
ke .env dan kendalikan pendaftaran pengguna dengan menetapkan nilainya ke true atau false.Sekarang Anda memiliki kendali penuh atas rute dan file Vendor tetap tidak tersentuh.
web.php
Ini adalah kombinasi dari beberapa jawaban sebelumnya terutama Rafal G. dan Daniel Centore.
sumber
Pada laravel 5.6 dan di atasnya Anda dapat mengedit dalam file web.php
dan Anda dapat mewujudkannya jika Anda berubah pikiran, saya melihatnya mudah seperti ini
sumber
Di
routes.php
, tambahkan saja berikut ini:Kemudian Anda dapat secara selektif mengontrol apakah pendaftaran diizinkan atau tidak dalam
.env
file Anda .sumber
Saya harus menggunakan:
Menggunakan Redirect :: to () memberi saya kesalahan:
sumber
Dalam Laravel 5.4
Anda dapat menemukan semua rute yang terdaftar
Auth::routes()
di kelas\Illuminate\Routing\Router
dalam metode iniauth()
terlihat seperti ini:
Cukup salin rute yang Anda inginkan / butuhkan dan Anda baik-baik saja!
sumber
Di laravel 5.3, Anda harus mengganti default
showRegistrationForm()
dengan memasukkan kode di bawah ini ke dalamRegisterController.php
fileapp\Http\Controllers\Auth
karena Anda tidak ingin mengizinkan pendaftaran, lebih baik membuang
404 error
begitu saja sehingga si penyusup tahu dia tersesat. Dan ketika Anda siap untuk registrasi di aplikasi Anda, batalkan komentar//return view('auth.register');
lalu komentarabort(404);
HANYA FYI /////////////////////////// ////
Jika Anda perlu menggunakan beberapa otentikasi seperti membuat auth untuk pengguna, anggota, siswa, admin, dll. Maka saya menyarankan Anda checkout ini hesto / multi-auth itu paket yang luar biasa untuk auths tak terbatas di aplikasi L5.
Anda dapat membaca lebih lanjut tentang metodologi Auth dan file yang terkait dalam penulisan ini .
sumber
Dalam Laravel 5.5
Saya mencoba menyelesaikan masalah yang sama di Laravel 5.5. Alih-alih menggunakan
Auth::routes()
dalam file rute web.php, saya hanya menyertakan rute login / logout:sumber
Ini telah disebutkan dalam komentar sebelumnya tetapi saya ingin mengklarifikasi bahwa ada beberapa cara untuk mengakses rute auth di file web.php Anda di Laravel ^ 5.7. tergantung pada versi Anda mungkin terlihat sedikit berbeda tetapi mereka mencapai hasil yang sama.
Pilihan pertama
Opsi kedua
sumber
sumber
Agar tidak terlalu mengubah kodenya, buat saja middleware untuk mendeteksi apakah url permintaan adalah url ('register'), lalu redirect ke 404 atau lakukan di mana saja.
sumber
Dalam Laravel 5.5
Bekerja pada masalah yang sama dan mengatur argumen middleware dari tamu ke 'auth' sepertinya solusi yang lebih elegan.
Edit File: app-> http-> Controllers-> Auth-> RegisterController.php
Saya bisa saja salah ... tetapi tampaknya lebih apik daripada mengedit perutean dengan lebih banyak baris dan lebih sedikit shity daripada hanya mengarahkan ulang halaman ... setidaknya dalam hal ini, ingin mengunci pendaftaran untuk tamu.
sumber
guest
middleware adalah mengarahkan jawab yang sudah login pengguna dari halaman yang hanya tamu bisa akses (yaitu/register
halaman)Saya kira ini lebih baik menjadi solusi yang lebih baik.
Ganti metode berikut seperti yang disebutkan di dalam
App \ Http \ Controller \ Auth \ RegisterController.php
sumber
Di Laravel 5.5 sangat sederhana, jika Anda menggunakan sistem rute CRUD.
Pergi ke
app/http/controllers/RegisterController
sana adalah namespace:Illuminate\Foundation\Auth\RegistersUser
Anda harus pergi ke RegistersUser:
Illuminate\Foundation\Auth\RegistersUser
Ada metode panggilan
showRegistrationForm
ubah ini:return view('auth.login');
untuk ini:return redirect()->route('auth.login');
dan hapus dari Anda register panggilan rute halaman blade. Mungkin terlihat seperti itu:sumber
Saya menemukan ini menjadi solusi termudah di laravel 5.6! Ini mengalihkan siapa saja yang mencoba masuk ke situs Anda.com/register ke situs Anda.com
rute / web.php
sumber
Yang saya lakukan adalah mengganti kode blade register dengan kode blade login. Dengan begitu register tetap masuk untuk login.
resources/views/auth/register.blade.php
diganti denganresources/views/auth/login.blade.php
sumber
Untuk Laravel 5.6+, rekatkan metode di bawah ini di
app\Http\Controller\Auth\RegisterController
Sekarang Anda
RegistersUser
mengganti metode-metode tersebut dalam sifat, setiap kali Anda berubah pikiran, hapus metode-metode ini. Anda juga dapat mengomentari tautanwelcome.blade.php
danlogin.blade.php
tampilan daftar.sumber
Menambahkan
di bagian atas file
sumber