Laravel 中间件访问受保护的值
Laravel Middleware access protected values
我写了自己的用户角色系统,但我不知道如何在我的中间件路由中实现验证。
中间件 class 正在调用每个请求。
我收到 $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() 我可以看到所有属性,但有一些是受保护的。
我需要更改什么才能使其正常工作?
访问 Eloquent 模型属性是通过访问器完成的,在本例中是通过 __get
magic method。所以你不需要通过 $attributes
属性 数组访问它们,你只需要这样:
$request->user()->email;
以上将 return 用户电子邮件,因为 Illuminate\Database\Eloquent\Model::__get
方法已经自动获取指定的属性。
如果愿意,您甚至可以定义自己的 Accessors or Mutators 以在读取或写入数据库时修改属性值。
我写了自己的用户角色系统,但我不知道如何在我的中间件路由中实现验证。
中间件 class 正在调用每个请求。
我收到 $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() 我可以看到所有属性,但有一些是受保护的。 我需要更改什么才能使其正常工作?
访问 Eloquent 模型属性是通过访问器完成的,在本例中是通过 __get
magic method。所以你不需要通过 $attributes
属性 数组访问它们,你只需要这样:
$request->user()->email;
以上将 return 用户电子邮件,因为 Illuminate\Database\Eloquent\Model::__get
方法已经自动获取指定的属性。
如果愿意,您甚至可以定义自己的 Accessors or Mutators 以在读取或写入数据库时修改属性值。