我有一个帐户电子邮件确认我的Laravel应用程序,然后我想检查何时用户试图登录,如果用户已激活他的帐户。
我有一个定制的模型函数isActivated,它只返回用户模型上的状态类型(布尔型,在西班牙语中名为estado )。
在我的用户模型上:
public function isActivated()
{
return $this->estado;
}
我创建了类似于上面提供的建议的链接的中间件,然后在App/Http/Kernel.php中注册为中间件路由
当我将中间件分配到我的路由时(而不是在我的控制器中创建构造函数,我希望这个中间件只是在登录控制器的post请求下)。
当我试图登录时,会抛出一个错误:
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/中间件/Authenticate(auth中间件)中添加了中间件的handle功能的内容,然后我将一些路由分组并附加到这个中间件上,这将按预期工作(不允许未经确认的用户登录)。
问题是,我在用户类型的用户表(Admin和Customer)中有一个修饰关系,所以我将admins控制面板附加并分组到auth中间件中,因为我需要只为经过身份验证的用户和管理类型重新分配对控制面板的访问(客户用户类型不允许)。
限制只参与管理用户类型。
当然,这让客户用户类型可以登录,因为我没有任何东西,如果他的帐户被确认或没有。
我做错什么了。isActivated模型函数在添加到auth中间件中时工作正常,但当我在自定义中间件中使用同样的方法时,则不能工作。
谢谢..。
编辑的
我的中间件为我的登录控制器指定了post方法。
Route::post('/login', [
'middleware' => 'activated.email',
'uses' => 'loginController@store'
]);
PD:很抱歉,这不是我的第一语言,我的第一语言是
发布于 2016-06-10 05:11:09
你对我们的逻辑有问题。您的登录路径不应该受到am激活用户的保护,因为中间件是在请求之前执行的,因此在您的情况下用户无法尝试登录,因此您将得到一个错误。
您可以做的是将您的isActivated()
检查添加到身份验证中间件中,这样您就有了一个日志用户,$this->auth->user()
就不会为空。
https://stackoverflow.com/questions/37748750
复制相似问题