2016-08-24 17 views
0

ログイン後、ユーザーが自分の役割に応じてURLにリダイレクトされる機能を実装しようとしています。私は役割部分を設定しましたが、ログイン直後にユーザーのプロパティをテストするのに問題があります。laravel 5.1でログインした後にユーザーをリダイレクトする

私はユーザのログインページを作成するためにhereの指示に従った。私はこのようになりますAuthControllerを持っている:

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller { 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 
    protected $redirectTo = '/test'; 
    ... 
} 

__construct()機能は、ユーザーを検証しますが、私は、ログイン直後にのみ、ユーザーオブジェクトにアクセスする方法がわかりません。

public function __construct() { 
    $this->middleware('guest', ['except' => 'getLogout']); 

    if (\Auth::check()) { 
     $user = \Auth::user(); 
     if ($user->admin()) { 
     // an admin 
      $this->redirectTo = '/admin'; 
     } else { 
     // it's a client 
      $this->redirectTo = '/client/dashboard'; 

     } 
    } 

    $user = \Auth::user(); 
    if (is_object($user)) { 
    } else { 
     $this->redirectTo = '/auth-not-object'; 
    } 
} 

私が最初に任意の認証されたユーザオブジェクトがその時点で存在していないので、私は、パス/auth-not-objectに取得するには、管理者アカウントを使ってログインしようとすると:これは私が現在持っているものです。ログインしようとした後

が、私は/login URLを再訪するとき、私は、このクラスが使用する特性のデフォルト$redirectToであると考えている、私は/homeにリダイレクト、不正なリダイレクトを取得。つまり、認証されたユーザーがいても、$redirectToを変更せずに、AuthController __construct()メソッドに合格したことを意味します。

How to add extra logic on login condition in Laravel 5.2laravel redirect to url after loginなど他の質問がありましたが、回答の適用方法がわかりません。たとえば、2番目の質問への回答では、新しいメソッド、getCredentials()login()がポスターの元のクラスには存在しません。私はどのクラスを追加するのか、どこから呼び出すのかはコードベースで分かりません。

他の同様の回答は、thisのように根本的に異なるユーザーを認証する方法を示しています。このソリューションを使用するには、コードを書き直し、ログイン抑制などのボーナス機能を含む特性の使用を忘れる必要があるようです。

これらの組み込みの特性を使用しながら、ログイン後の役割に基づいてユーザーをリダイレクトする方法はありますか?

答えて

1

イム5.1認証5.2認証と同じですが、それであれば、構築物からすべてのことを削除して、このメソッドを追加するかどうかわからない:

protected function handleUserWasAuthenticated(Request $request, $throttles, $guard) 
    { 
     if ($throttles) { 
      $this->clearLoginAttempts($request); 
     } 
     if (method_exists($this, 'authenticated')) { 
      return $this->authenticated($request, Auth::guard($guard)->user()); 
     } 
     return redirect()->intended($this->redirectTo); 
    } 

これが決定されます方法であり、リダイレクトして、ユーザーオブジェクトにアクセスできます。

EDIT

私はちょうどあなたのコントローラに以下を追加し、上記のバックを取ります。動作するはず

protected function authenticated($request, $user) { 
    return redirect()->intended($user->admin() ? '/admin' : '/client/dashboard'); 
} 

うまく

+0

また([=> 'getLogout' 'を除く'] 'ゲスト'、) 'ます$ this->ミドルウェアを削除;'?それは箱から出てきた唯一の作品でした。 – user151841

+0

App \ Http \ Controllers \ Auth \ AuthController :: handleUserWasAuthenticated()に渡された引数 'App \ Http \ Controllers \ Auth \ Requestのインスタンスである必要があります、Illuminate \ Http \ Requestのインスタンス私はメソッドシグネチャを 'protected function handleUserWasAuthenticated(\ App \ Http \ Controllers \ Auth \ Request $ request、$ throttles、$ guard)に変更した後でも' – user151841

+0

私の答えをより良い解決策に編集しました(ちょうど上記の方法の後半、dohを見ました!) –

関連する問題