web-dev-qa-db-ja.com

Laravel 5.4登録ルートの無効化

Laravel 5.4で実行されているアプリケーションの登録ルートを無効にしようとしています。

ルートファイルには、

Auth::routes();

登録ルートを無効にする方法はありますか?

34
Dev.Wol

code

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

そのため、最初のルートをルートのリストに置き換えて、アプリケーションで不要なルートをコメントアウトできます。

laravel version => 5.7の編集

新しいバージョンでは、Auth::routes()関数呼び出しにパラメーターを追加して、登録ルートを無効にできます。

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

メール確認ルートが追加されました:

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

ところで、Password ResetおよびEmail Verificationルートを無効にすることもできます。

Auth::routes(['reset' => false, 'verify' => false]);
68
dparoli

Laravel 5.7以降、新しい$optionsパラメーターが Auth::routes() メソッドに導入されました。ユーザー認証用のrequiredルートの生成を制御する配列を渡すことができます(有効なエントリは'register'から選択できます) 、'reset'、または'verify'文字列リテラル)。

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

これを試すことができます。

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

Auth::routes()のすぐ下にこれらのルートを追加して、デフォルトの登録ルートをオーバーライドします。 /registerルートへのリクエストはすべてbaseUrlにリダイレクトされます。

21
Elvis Mugabi

これは一見簡単です! app/Http/Controllers/Auth/RegisterController.phpクラスの2つのメソッドをオーバーライドするだけです。以下を参照してください。フォームが表示されなくなり、最も重要なことは、登録のためのアプリケーションへの直接POST要求をブロックすることです。

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

Web.phpで、置換

Auth::routes();

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

そのため、デフォルトの認証ルートリストから登録ルートを削除できます。 5.7で試したところ、うまくいきました。

4
Karthik M

上記のソリューションは機能しますが、'auth'middlewareApp\Http\Controllers\Auth\RegisterControllerに変更するのが最も簡単なソリューションの1つになると思います。これにより、すべての訪問者が登録ルートにアクセスしたい場合、ログインページにリダイレクトされます。このような:

namespace App\Http\Controllers\Auth;
class RegisterController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
3
asmmahmud

Web.phpファイルで次のようにできると思います。

Route::redirect('register', 'login', 301);
2
Evan

私のLaravel 5.6プロジェクトでは、このメソッドは機能しませんでした:

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

そのため、次の方法を使用する必要がありました。

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

1

ゲストの一部のページへのアクセスを制限し、ゲストのみを管理できるのは管理者だけだと思います。以下のようにkernel.phpファイルに独自のミドルウェアを追加することでそれを達成できます。

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

ミドルウェアを作成したら、それを使用して、ルートがあるweb.phpファイルに移動し、以下のように制限したいルートに追加する必要があります。

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

この方法では、登録はゲストに制限されますが、管理者は他の管理者を登録したい場合でも引き続きページにアクセスできます!

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')->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');
1
glou1986

この2つのメソッドをapp\Http\Controllers\Auth\RegisterController.phpに追加します

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

public function register(){

}
0
sachinsuthariya

Authを上書きするだけですshowRegistrationForm() method(このコードをAuth/RegisterControllerに配置してください)

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

登録ルートをログインルートにリダイレクトしています。ここでは、他のコードを追加または削除する必要はありません

0
Manu Joseph