我有我的Laravel应用程序的帐户电子邮件确认,然后我想检查用户尝试登录时,如果用户已激活他的帐户。自定义中间件检查模型自定义函数返回值的错误自定义函数Laravel 5.1
我有一个自定义模式功能isActivated只返回用户模式的状态attibute(布尔型,西班牙文命名的国家体制)。
在我的用户模型:
public function isActivated()
{
return $this->estado;
}
我创建为提供建议上面的链接类似我的中间件,然后我在app/HTTP/Kernel.php注册为中间件路线
问题来了当我将中间件分配给我的路由(而不是在我的控制器中创建构造函数时,我只需要在登录控制器的发布请求中使用此中间件)。
当我试图登录抛出一个错误:
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);
}
}
}
有趣的部分:如果我添加的处理函数的内容我在App/Http/Middleware/Authenticate(auth中间件)中的中间件,然后我将一些路由分组并附加到这个中间件,这按预期工作(不允许未确认的用户登录)
问题是,我在用户表中为用户类型(管理员和客户)设置了多态关系,因此我将管理控制面板连接并分组为auth中间件,因为我需要将控制面板的访问权限仅用于已认证的用户和管理员类型(不允许客户用户类型)。
仅限管理员用户类型的限制。
而coursethis让客户用户类型可以登录,因为如果他的帐户被确认或没有,那么我没有任何活动。
我在做什么错误...当在auth中间件中添加isActivated模型函数时可以正常工作,但在我的自定义中间件中使用这种方法时没有问题。
感谢....
EDITED
我中间件asigned我的帖子方法为我登录控制器
Route::post('/login', [
'middleware' => 'activated.email',
'uses' => '[email protected]'
]);
PD:对不起长的帖子和英语不好habilities,它是不是我的第一语言:(
你可以粘贴你如何分配这个中间件到你的路线? – TheFallen
当然,我编辑了我的帖子,添加了路线定义:) @TheFallen – elotgamu