2017-04-07 11 views
-1

私はlaravel 5.4でmake:authメソッドを使用しています。さて、私は、レジスタオプションの動作を変更したいと思います。私は、管理者としてログインしているユーザーに対してのみ登録オプションを使用したいと考えています。他のユーザーには、登録オプションを無効にする必要があります。元のバージョンでは、認証前に登録することができます。私はこの登録オプションを使用して、管理者に新しいユーザーを追加させたいと思っています。 私はuser.blade.phpのページを登録するためにユーザー認証とリダイレクトのオプションを試みましたが、動作しません。私は私の新しいプロジェクトのためのラーベルを学んでいます。どのように進むべきかについての専門家のアドバイス。ログインした後にのみ登録ページを有効にする - Laravel 5.4

答えて

2

は現在、このような方法はでないだけで、ユーザーがページにアクセスすることができますログインように、これは現在、それを作っている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プログラミング)ので、私が好む方法です。それは本当に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'); 

    } 

にhelped.changes

0

は、あなたが言ったように、ユーザーに「is_admin」という名前のフィールドは、ファイル内の他の変更をtable.And持っています。 公開ページ(http://localhost/larashop/public/)では、ログインと登録の両方のリンクが表示されます。 1.ログインをクリックすると、ログインページにリダイレクトされます。ここでは、管理者の電子メールIDを入力します。管理者以外のユーザーの場合も登録オプションも表示されません。 2.登録をクリックすると、ログインページにリダイレクトされます。 ここでは、管理者の電子メールIDを入力します。登録ページにリダイレクトされ、管理者以外のユーザーはホームページにリダイレクトされます。 ログインリンクが期待通りに機能しません。ご意見は

` 
関連する問題