如何保护laravel 5.2中的auth midleware注册


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.hp:添加到内核文件中的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');

希望它能有所帮助!