postLogin () перенаправление метода после входа в Laravel 5.2

Я хочу, чтобы мой AuthController проверил несколько условий и соответствующим образом перенаправил соответствующие маршруты. Я хочу проверить, нет ли пустых входных данных в базе данных пользователя. Если он не пуст, я перенаправляюсь на домашнюю страницу, иначе я перенаправляюсь на другой маршрут. Я использовал метод postLogin. проблема здесь заключается в том, что он не проверяет состояние вообще и напрямую перенаправляется на дом, даже если сбой концессии. Я попытался войти в систему с новыми пользователями, чьи данные в БД не заполнены, а затем перенаправил меня на домашнюю страницу, а также с пользователем, у которого есть личные данные, заполненные в БД

вот код моего AuthController

<?php 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 { /* |-------------------------------------------------------------------------- | Registration & Login Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users, as well as the | authentication of existing users. By default, this controller uses | a simple trait to add these behaviors. Why don't you explore it? | */ use AuthenticatesAndRegistersUsers, ThrottlesLogins; /** * Where to redirect users after login / registration. * * @var string */ //protected $redirectTo = '/user-prof'; public function postLogin(Request $request) { $email = $request->email; $user = \Auth::user(); if(($user->username && $user->phone && $user->bio && $user->dobday && $user->dobmonth && $user->dobyear && $user->firstname && $user->lastname && $user->topics && $user->nationality)!= NULL) { redirect('home'); } else { redirect('/user-prof'); } return $this->login($request); } /** * Create a new authentication controller instance. * * @return void */ public function __construct() { $this->middleware($this->guestMiddleware(), ['except' => 'logout']); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6|confirmed', ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); } } 

Я также хочу знать, проверяю ли я данные столбца базы данных правильно в условии IF внутри postLogin() .

Вероятно, вы хотите сделать эти проверки после того, как пользователь «прошел проверку подлинности» и выполнил вход в систему. Вы можете определить authenticated метод на вашем AuthController, который будет вызван handleUserWasAuthenticated после того, как пользователь будет аутентифицирован.

Возможно, что-то вроде этого. (Получите атрибуты пользователя, получите только те, которые мы хотим проверить, используйте array_filter для удаления нулей, посмотрите, есть ли все необходимые поля).

 protected function authenticated($request, $user) { $required = [ 'username', 'phone', 'bio', 'dobday', 'dobmonth', 'dobyear', 'firstname', 'lastname', 'topics', 'nationality' ]; $userAtts = array_filter(array_only($user->toArray(), $required)); if (count($userAtts) != count($required)) { return redirect('/user-prof'); } return redirect('home'); } 

Это не изменяет никаких методов, которые AuthController уже имеет с помощью признаков, он просто добавляет метод, который handleUserWasAuthenticated проверяет, существует ли он, и если это так его вызовет.

Illuminate\Foundation\Auth\AuthenticatesUsers@login -> @handleUserWasAuthenticated

Если вы намереваетесь «кэшировать» пользователя до тех пор, пока эти поля не будут заполнены, я перейду с вариантом промежуточного программного обеспечения, аналогичным тому, что говорит @ Ravi, но он должен применяться к множеству маршрутов.

Не переопределяйте метод в Authcontroller. Используйте post-middleware на пути postLogin, чтобы проверить условия и маршрут соответственно.

https://laravel.com/docs/5.2/middleware

Есть еще один способ сделать это; однако я бы не предложил вам это сделать. Вы можете изменить свойство RedirectsUsers. Это файл Laravel и по умолчанию будет возвращен к оригиналу при каждом обновлении композитора. Хотя вы можете взглянуть на него, чтобы понять перенаправление

https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/RedirectsUsers.php