簡體   English   中英

如何在Laravel 5.2中使用身份驗證中間件保護注冊

[英]How to protect register with auth midleware in laravel 5.2

我已經運行過php artisan make:auth命令並具有登錄視圖。.但現在我擔心的是我想保護用戶免於注冊自己,他們應該由經過身份驗證的管理員注冊,該如何使用auth中間件來實現這一點。

我的路線文件就像

  Route::group(['middleware' => ['web']], function () {

  Route::get('/', function () {
return view('login');
 });

Route::auth();

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


});

解決方案1(任何經過身份驗證的用戶)

在文件/app/Http/Controllers/Auth/RegisterController.php

只需從

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

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

解決方案2(僅經過身份驗證的管理員用戶) a)運行

php artisan make:middleware IsAdmin

b)通過打開app / Http / Kernel.php將其添加到內核文件中的routeMiddleware數組中:

'admin' => \App\Http\Middleware\IsAdmin::class,

c)編輯isAdmin文件

public function handle($request, Closure $next)
{
     if (Auth::user() &&  Auth::user()->is_admin == 1) {
            return $next($request);
     }

    return redirect('/');
}

d)在文件/app/Http/Controllers/Auth/RegisterController.php上,將構造函數從

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

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

e)更新用戶遷移以包括布爾值字段

Schema::create('users', function (Blueprint $table) {
    $table->mediumIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->boolean('is_admin')->default(false);
    $table->rememberToken();
    $table->timestamps();
});

f)更新用戶模型以允許“ is_admin”字段

protected $fillable = [
    'name', 'email', 'password', 'is_admin'
];

Route類的靜態方法auth()正在為您生成路由,因此您只需刪除以下行:

Route::auth();

並手動放置要啟用的路由,在這種情況下,只需登錄即可:

Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM