[英]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.