登录后才启用注册页面 - Laravel 5.4

时间:2017-04-07 17:13:10

标签: php laravel laravel-5.4

我在laravel 5.4中使用make:auth方法。现在,我想更改Register选项的行为。我想只为以管理员身份登录的用户提供注册选项,对于其他用户,我应该禁用注册选项。原始版本允许您在进行身份验证之前进行注册。我想使用此注册选项使管理员添加新用户。 我尝试了在home.blade.php中验证用户和重定向到注册页面的选项,但它不起作用。我正在为我的新项目学习laravel。所以关于如何进行的任何专家建议。

2 个答案:

答案 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,它重定向到注册页面,对于非管理员用户,它重定向到主页。这很好。 因此,登录链接无法按预期工作。任何建议

 `
相关问题