Laravel 5.4 Nonaktifkan Rute Daftar

Saya mencoba menonaktifkan rute register pada aplikasi saya yang berjalan di Laravel 5.4.

Di file rute saya, saya hanya punya

Auth::routes();

Apakah ada cara untuk menonaktifkan rute register?


person Dev.Wol    schedule 09.03.2017    source sumber
comment
Di laravel versi 5.7.5 saat ini ada opsi untuk ini. Auth::routes(['register' => false]);   -  person Zohaib    schedule 22.09.2018
comment
lihat github.com/laravel/framework/blob /5.7/src/Menerangi/Routing/   -  person Zohaib    schedule 22.09.2018


Jawaban (13)


code:

Auth::routes();

ini jalan pintas untuk kumpulan rute ini:

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

Jadi Anda dapat mengganti yang pertama dengan daftar rute dan mengomentari rute mana pun yang tidak Anda inginkan di aplikasi Anda.

Edit untuk laravel version => 5.7

Di versi yang lebih baru, Anda dapat menambahkan parameter ke pemanggilan fungsi Auth::routes() untuk menonaktifkan rute register:

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

Rute verifikasi email telah ditambahkan:

Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');

BTW Anda juga dapat menonaktifkan rute Password Reset dan Email Verification:

Auth::routes(['reset' => false, 'verify' => false]);
person dparoli    schedule 09.03.2017
comment
mengapa menulis seluruh bagian ini dari setiap rute autentikasi, padahal Anda cukup melakukan seperti Auth::routes(['register' => false]);, mengapa? - person Haritsinh Gohil; 17.07.2019
comment
@Haritsinh. Pertanyaannya adalah tentang laravel versi 5.4. Dalam versi 5.4, fungsi Auth::routes() tidak menerima argumen apa pun, yang hanya diperkenalkan di versi yang lebih baru. - person dparoli; 17.07.2019
comment
oke, kamu benar kawan, Auth::routes() mendukung argumen setelah laravel 5.7 tetapi kamu juga bisa melakukan seperti ini di versi laravel ‹ 5.7 Route::redirect('register', 'login', 301); yang terlihat lebih sederhana dari di atas bukan ? - person Haritsinh Gohil; 17.07.2019
comment
@Haritsinh Saya ingin menunjukkan bahwa pertanyaan ini ditandai dan diminta secara eksplisit untuk Laravel 5.4. Di versi 5.4 fungsi Route::redirect() tidak ada. - person dparoli; 17.07.2019
comment
oke, @dparoli ini salahku, aku belum melihatnya, redirect juga ditambahkan di laravel 5.5, maaf terima kasih sudah beres. - person Haritsinh Gohil; 17.07.2019

Sejak Laravel 5.7, parameter $options baru diperkenalkan ke Auth::routes() metode; yang melaluinya Anda dapat meneruskan larik untuk mengontrol pembuatan rute yang diperlukan untuk autentikasi pengguna (entri yang valid dapat dipilih dari literal string 'register', 'reset', atau 'verify').

Auth::routes(['register' => false]);
person Irwing Reza    schedule 09.10.2018
comment
Opsi lainnya adalah menambahkan rute verifikasi email, yang dinonaktifkan secara default. Auth::routes(['verify' => true]); - person Grant; 09.11.2018
comment
Ini harus menjadi jawabannya karena ini adalah cara [praktik] terbaik untuk melakukannya jika Anda hanya ingin menonaktifkan rute register tanpa ingin mengedit rute Auth default lainnya. - person SolidTerre; 28.02.2019
comment
Ini harus dianggap sebagai jawaban yang sempurna, karena ini adalah cara yang tepat untuk mengabaikan rute register dan juga berfungsi dengan Laravel 5.8. - person Mehul Panchasara; 14.04.2019

Anda bisa mencoba ini.

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

Tambahkan rute tersebut tepat di bawah Auth::routes() untuk mengganti rute pendaftaran default. Setiap permintaan ke rute /register akan dialihkan ke baseUrl.

person Elvis Mugabi    schedule 01.04.2017
comment
Menonaktifkan /login halaman. - person Jason; 25.05.2017
comment
Bekerja dengan sangat baik. Solusi sederhana! Terima kasih! - person iaforek; 14.11.2017
comment
Solusi Cukup Sederhana dan Bekerja Efisien. - person Uzair; 29.01.2019
comment
@Jason salah. Saya mengujinya dengan laravel 8 menggunakan larave ui auth bootstrap - person Freddy Daniel; 06.07.2021

Ini tampaknya mudah! Anda hanya perlu mengganti dua metode di Kelas app/Http/Controllers/Auth/RegisterController.php Anda. Lihat di bawah yang akan mencegah formulir ditampilkan dan yang paling penting memblokir permintaan POST langsung ke aplikasi Anda untuk pendaftaran..

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

Di web.php, Ganti

Auth::routes();

Dengan

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

Sehingga Anda dapat menghapus rute pendaftaran dari daftar rute autentikasi default. saya mencoba di 5.7 dan berfungsi dengan baik.

person Karthik M    schedule 03.11.2018
comment
Ketika saya melakukan ini, halaman login saya juga dinonaktifkan? - person rubendn; 22.11.2018

Meskipun solusi di atas berhasil, tetapi menurut saya mengubah middleware menjadi 'auth' di App\Http\Controllers\Auth\RegisterController akan menjadi salah satu solusi termudah. Ini akan mengarahkan semua pengunjung ke halaman login jika mereka ingin mengakses salah satu rute pendaftaran. Seperti ini:

namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
person asmmahmud    schedule 03.10.2017
comment
Ini akan mengarahkan pengguna ke halaman login. Dan jika pengguna memasukkan email/kata sandi yang benar di sana. Dia masih akan diarahkan ke halaman Pendaftaran, yang salah sesuai kebutuhan OP. - person Waqas; 06.05.2018

Pada proyek Laravel 5.6 saya, metode ini tidak berfungsi:

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

Jadi saya harus menggunakan metode berikut:

Route::match(['get', 'post'], 'register', function () {
    return abort(403, 'Forbidden');
})->name('register');
person Abdelsalam Shahlol    schedule 08.05.2019

Saya kira Anda ingin membatasi akses ke beberapa halaman untuk tamu dan hanya admin yang dapat mendaftarkan tamu. Anda dapat mencapainya dengan menambahkan middleware Anda sendiri pada file kernel.php seperti di bawah ini:

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

Setelah membuat middleware, Anda harus menggunakannya sehingga Anda dapat membuka file web.php di mana rute Anda berada dan menambahkannya ke rute yang ingin Anda batasi seperti di bawah ini:

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

Dengan cara ini pendaftaran dibatasi untuk tamu tetapi admin masih dapat mengakses halaman tersebut jika dia ingin mendaftarkan admin lain!

Jangan lupa ganti Auth::routes(); dengan daftar detailnya seperti di bawah ini:

// 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');
person glou1986    schedule 15.04.2017
comment
Auth::routes() ada di file rute/web.php - person geeves; 24.07.2018

Saya kira Anda bisa melakukannya seperti ini, di file web.php Anda:

Route::redirect('register', 'login', 301);
person Evan    schedule 23.09.2018

Tambahkan dua metode ini ke app\Http\Controllers\Auth\RegisterController.php

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

public function register(){

}
person sachinsuthariya    schedule 29.01.2019

Cukup timpa metode autentikasi showRegistrationForm() Anda (tempatkan kode ini di dalam Auth/RegisterController )

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

Saya hanya mengarahkan rute pendaftaran saya ke rute login. Di sini Anda tidak perlu menambahkan atau menghapus kode lainnya

person Manu Joseph    schedule 26.02.2019

Ya, ada jalan

Auth::routes();

Hapus rute itu dari web.php Anda di direktori rute Anda.

Rute itulah yang mengontrol pendaftaran.

person Hanny    schedule 09.03.2017
comment
downvoters jawaban ini tidak sepenuhnya salah, hanya setengah benar - person Salal Aslam; 14.09.2017
comment
Jika Anda melakukannya, Anda juga akan menonaktifkan metode login, jadi jawaban ini salah! - person user2519032; 14.09.2017
comment
Sebenarnya, itu hanya setengahnya saja. Auth::routes(); adalah pintasan untuk kumpulan rute sesuai dokumentasi. Jika Anda menghapus Auth::routes(); maka Anda dapat memasukkan rute apa pun yang sebenarnya Anda inginkan satu per satu (seperti login). Saya pikir tidak perlu dikatakan lagi, karena dokumentasi mencakup hal itu - rupanya saya salah. Jawaban ini secara teknis benar dan benar. Saya tidak tahu mengapa orang masih meremehkan ini... itu sebenarnya setengah dari jawaban yang diterima. - person Hanny; 10.04.2018

Ubah ke rute:

vendor\laravel\framework\src\Illuminate\Routing\Router.php

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');
}
person Carlos De la Cruz    schedule 13.08.2017
comment
membuat perubahan pada file apa pun di folder vendor adalah ide terburuk - person Salal Aslam; 14.09.2017
comment
Ini adalah ide yang buruk karena pembaruan Laravel berikutnya akan menimpa file yang telah diedit. Dengan demikian perubahan Anda hilang. Itu juga membuat kode Anda sulit diikuti. Pengembang lain mungkin tidak berpikir untuk memodifikasi file ini dan karenanya tidak pernah mencari perubahan apa pun. - person geeves; 24.07.2018