У меня есть подтверждение по электронной почте для моего приложения Laravel, после чего я хочу проверить, когда пользователь пытается войти в систему, если пользователь активировал свою учетную запись.Ошибка в пользовательском промежуточном программном обеспечении, проверяющем значение, возвращаемое в пользовательской функции модели Laravel 5.1
У меня есть функция пользовательской модели isActivated, что только возвращает состояние (булево атрибут объявления типа, названный Estado на испанском языке) на модели пользователя.
На моей модели пользователя:
public function isActivated()
{
return $this->estado;
}
Я создал промежуточное программное обеспечение подобное, как по ссылке выше предоставленных советов, то я зарегистрирован в App/Http/Kernel.php в качестве промежуточного маршрута
Проблема возникает когда я назначаю свое промежуточное ПО на свой маршрут (вместо создания функции construct в моем контроллере, я хочу, чтобы это промежуточное программное обеспечение было только после запроса контроллера входа).
Когда я попытался войти в систему выдает ошибку:
Fatal Throwable Error:
Fatal Error: Call to a member function isActivated() on null
Мой промежуточного слоя выглядит взыскивает как ссылка
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
class RedirectIfNotMailActivated
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $this->auth->user()->isActivated()) {
return redirect('/login')
->with('mensaje',
'¡Lo sentimos, no ha confirmado su cuenta aún!');
} else {
return $next($request);
}
}
}
забавная часть: если я добавляю содержание функции ручки моего промежуточное программное обеспечение в приложении/Http/Middleware/Authenticate (auth middleware), а затем я группирую и прикрепляю некоторые маршруты к этому промежуточному программному обеспечению, это работает как ожидалось (не позволяя не подтвержденным пользователям входить в систему)
Проблема заключается в том, что у меня есть полиморфическая связь в таблице пользователей для типа пользователя (Admin и Customer), поэтому я привязал и сгруппировал панель управления админами с промежуточным ПО промежуточного уровня, потому что мне нужно ограничить доступ к панели управления только для аутентифицированных пользователей и типа администратора (не допускается для типа пользователя клиента).
Ограничение принимает участие только в отношении типа администратора.
И из coursethis позволяют пользователям пользовательских типов войти в систему, потому что у меня нет ничего, что ограничивало бы, если его учет подтвержден или нет.
Что я делаю неправильно ... Функция isActivated model работает нормально, когда добавляется в промежуточное ПО auth, но нет, когда я использую этот же подход в своем обычном промежуточном программном обеспечении.
Спасибо ....
РЕДАКЦИЯ
Моего промежуточный asigned моего метод поста для моего контроллера входа
Route::post('/login', [
'middleware' => 'activated.email',
'uses' => '[email protected]'
]);
PD: извините за длинный пост и плохого английского habilities, его это не мой первый язык :(
Можете ли вы вставить, как назначить это промежуточное ПО на свой маршрут? – TheFallen
Конечно, я редактировал мой пост, добавляя определение маршрута :) @TheFallen – elotgamu