首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义中间件检查模型自定义函数Laravel5.1返回的值时出错

自定义中间件检查模型自定义函数Laravel5.1返回的值时出错
EN

Stack Overflow用户
提问于 2016-06-10 12:49:37
回答 1查看 803关注 0票数 0

我有一个帐户电子邮件确认我的Laravel应用程序,然后我想检查何时用户试图登录,如果用户已激活他的帐户。

我发现了这个:https://laracasts.com/discuss/channels/general-discussion/how-to-test-if-a-user-which-tries-to-log-in-is-confirmed-yet

我有一个定制的模型函数isActivated,它只返回用户模型上的状态类型(布尔型,在西班牙语中名为estado )。

在我的用户模型上:

代码语言:javascript
运行
复制
public function isActivated()
{
    return $this->estado;
}

我创建了类似于上面提供的建议的链接的中间件,然后在App/Http/Kernel.php中注册为中间件路由

当我将中间件分配到我的路由时(而不是在我的控制器中创建构造函数,我希望这个中间件只是在登录控制器的post请求下)。

当我试图登录时,会抛出一个错误:

代码语言:javascript
运行
复制
Fatal Throwable Error: 
Fatal Error: Call to a member function isActivated() on null

我的中间件看起来像链接。

代码语言:javascript
运行
复制
<?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方法。

代码语言:javascript
运行
复制
Route::post('/login', [
        'middleware' => 'activated.email',
        'uses' => 'loginController@store'
]);

PD:很抱歉,这不是我的第一语言,我的第一语言是

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-10 13:11:09

你对我们的逻辑有问题。您的登录路径不应该受到am激活用户的保护,因为中间件是在请求之前执行的,因此在您的情况下用户无法尝试登录,因此您将得到一个错误。

您可以做的是将您的isActivated()检查添加到身份验证中间件中,这样您就有了一个日志用户,$this->auth->user()就不会为空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37748750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档