ログイン後、ユーザーが自分の役割に応じて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.2とlaravel redirect to url after loginなど他の質問がありましたが、回答の適用方法がわかりません。たとえば、2番目の質問への回答では、新しいメソッド、getCredentials()
とlogin()
がポスターの元のクラスには存在しません。私はどのクラスを追加するのか、どこから呼び出すのかはコードベースで分かりません。
他の同様の回答は、thisのように根本的に異なるユーザーを認証する方法を示しています。このソリューションを使用するには、コードを書き直し、ログイン抑制などのボーナス機能を含む特性の使用を忘れる必要があるようです。
これらの組み込みの特性を使用しながら、ログイン後の役割に基づいてユーザーをリダイレクトする方法はありますか?
また([=> 'getLogout' 'を除く'] 'ゲスト'、) 'ます$ this->ミドルウェアを削除;'?それは箱から出てきた唯一の作品でした。 – user151841
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
私の答えをより良い解決策に編集しました(ちょうど上記の方法の後半、dohを見ました!) –