我在laravel 5.4中使用make:auth方法。现在,我想更改Register选项的行为。我想只为以管理员身份登录的用户提供注册选项,对于其他用户,我应该禁用注册选项。原始版本允许您在进行身份验证之前进行注册。我想使用此注册选项使管理员添加新用户。 我尝试了在home.blade.php中验证用户和重定向到注册页面的选项,但它不起作用。我正在为我的新项目学习laravel。所以关于如何进行的任何专家建议。
答案 0 :(得分:3)
目前在App\Http\Controllers\Auth\RegisterController
public function __construct()
{
$this->middleware('guest');
}
目前这样做只有不登录的用户才能访问该页面。相反,让我们改变它以满足您的一个标准的需求:
public function __construct()
{
$this->middleware('auth');
}
很好,现在他们必须登录才能访问它。但是作为管理员怎么样?我们现在制作那个中间件:
php artisan make:middelware AdminMiddleware
现在让我们在App\Http\Middleware\AdminMiddleware
打开文件并进行一些调整。
注意我必须在此处对您的代码库做出一些假设。
public function handle($request, Closure $next)
{
if ( auth()->check() && auth()->user()->hasRole('admin')) {
return $next($request);
}
return redirect('/');
}
接下来,让我们注册我们的应用程序中间件。打开App\Http\Kernel.php
并滚动到底部:
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\AdminMiddleware::class, // <--add this
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
最后让我们回到App\Http\Controllers\Auth\RegisterController
并更新我们的construct
函数以使用此中间件:
public function __construct()
{
$this->middleware(['auth', 'admin']);
}
现在您的用户必须已登录,并且他们的角色必须为admin
。
肯定有更短的方法来完成这项工作,但这是一种我更喜欢的方法,因为它可以帮助你重复自己(DRY编程)。
答案 1 :(得分:0)
它确实有所帮助。在App\Http\Middleware\AdminMiddleware
use Illuminate\Support\Facades\Auth;
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->is_admin == 1)
{
return $next($request);
}
return redirect('home');
}
在users表中有一个名为'is_admin'的字段。如您所说,文件中的其他更改。 现在在公共页面(http://localhost/larashop/public/)中,这里登录并注册两个链接都是可见的。 1.当我点击Login时,它会重定向到登录页面:这里我输入了一个管理员电子邮件ID,它不会向非管理员用户显示注册选项。 2.当我点击Register时,它会重定向到登录页面: 在这里,我输入管理员电子邮件ID,它重定向到注册页面,对于非管理员用户,它重定向到主页。这很好。 因此,登录链接无法按预期工作。任何建议
`