У меня установлен новый проект Laravel 5.6. Я изменил create_users_migration
, добавил поле $table->boolean('is_active');
. Теперь я хочу, когда пользователь пытается войти в систему, проверять, установлено ли в поле is_active
значение true.
Я попытался переписать стандартный метод AuthenticatesUsers
:
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
]);
}
После password
я добавил строку 'is_active' => true,
, и теперь, когда я нажимаю кнопку "Войти", она возвращает мне ошибку array_map(): Argument #2 should be an array
.
Я попытался просто скопировать и вставить этот метод в LoginController
, но он выдает ту же ошибку. Есть идеи, или может быть здесь другое решение?
Полный код LoginController
:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
'is_active' => true,
]);
}
}
2 ответа
Вы редактируете неправильный метод. Этот метод проверяет запрос, и «истина» не является правилом проверки, поэтому вы получаете сообщение об ошибке.
Вот простое решение. Переопределите метод учетных данных на вашем LoginController
, как показано ниже.
protected function credentials(Request $request)
{
$data = $request->only($this->username(), 'password');
$data['is_active'] = true;
return $data;
}
Таким образом, только активные пользователи могут войти в систему.
Вы также можете создать промежуточное ПО и использовать его для отправки пользователей, которые не активировали свою учетную запись, на страницу активации.
Я сделал это для одного проекта с промежуточным ПО:
<?php
namespace App\Http\Middleware;
use Closure;
class isActiv
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->user()->isActiv()){
return $next($request);
}else{
return redirect()->route('dashboard')->with('errors', 'Votre compte utilisateur n\'est pas activé sur le site. Veuillez contacter un administrateur pour résoudre le problème.');
}
}
}
Затем в моем файле маршрута web.php
:
Route::group(['middleware' => ['isActiv'] ], function(){
И в моей пользовательской модели:
public function isActiv(){
if($this->is_activ == 1 || $this->is_admin == 1){
return true;
}
return false;
}
Похожие вопросы
Новые вопросы
laravel
Laravel - это бесплатная веб-инфраструктура PHP с открытым исходным кодом, созданная Тейлором Отвеллом и предназначенная для разработки веб-приложений по архитектурному шаблону модель-представление-контроллер (MVC) на основе Symfony. Исходный код Laravel размещен на GitHub и лицензирован в соответствии с условиями лицензии MIT.