【问题标题】:Laravel Middleware access protected valuesLaravel 中间件访问受保护的值
【发布时间】:2016-02-05 22:56:42
【问题描述】:

我编写了自己的用户角色系统,但我不知道如何在我的中间件路由中实现验证。

中间件类正在调用每个请求。

我收到了 $request->user() 但我无法访问属性来验证用户是否具有正确的权限。

我的中间件控制器如下所示:

namespace App\Http\Middleware;

use Closure;
use Activation;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;

class AccountMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = Sentinel::findByCredentials([
            'login' => $request->user()->attributes['email']
        );
        ...
        return $next($request);
    }
}

它不起作用。

如果我尝试转储 $request->user() 我可以看到所有属性,但有受保护的。 我需要改变什么才能让它发挥作用?

【问题讨论】:

    标签: laravel controller middleware


    【解决方案1】:

    访问 Eloquent 模型属性是通过访问器完成的,在本例中是通过 __get magic method。所以你不需要通过$attributes属性数组来访问它们,你只需要这样:

    $request->user()->email;
    

    上面会返回用户邮件,因为Illuminate\Database\Eloquent\Model::__get方法已经自动获取了指定的属性。


    如果您愿意,您甚至可以定义自己的Accessors or Mutators,以便在读取或写入数据库时​​修改属性值。

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 1970-01-01
      • 2013-08-06
      • 2014-09-13
      • 1970-01-01
      • 2013-03-06
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多