php - 身份验证时未从中间件获取用户角色
问题描述
我想将用户引导到他们的仪表板,但在此之前,我需要他们的角色。我没有收到来自我的中间件的角色。我尝试了表之间的关系,但它不起作用。
CustomerAuth 中间件
<?php
namespace App\Http\Middleware;
use Closure;
use App\Http\Requests\Request;
class CustomerAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!auth()->check()) {
return $next($request);
}
else{
dd(auth()->user()->roles);
foreach (auth()->user()->roles as $role){
if ($role->slug == 'admin' || $role->slug == 'product-admin' || $role->slug == 'logistic-admin' ){
return redirect()->route('customer.login-reset');
}
}
foreach (auth()->user()->roles as $role){
if ($role->slug == 'customer' ){
return redirect()->route('customer.dashboard');
}
}
}
}
}
用户模型
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
class User extends BaseModel
{
protected $table='users';
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'username','name', 'email', 'password','profile_image','role_id'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function roles(){
return $this->belongsToMany(Role::class);
}
}
我遇到的错误是试图获取非对象的属性。
解决方案
关系看起来还可以。也许重构中间件,使其更具可读性。说什么dd(auth()->user()->roles)
?它在哪一行出错?
namespace App\Http\Middleware;
use App\Http\Requests\Request;
use Closure;
class CustomerAuth
{
public function handle($request, Closure $next)
{
if (auth()->check()) {
foreach (auth()->user()->roles as $role) {
if ($role->slug === 'admin' ||
$role->slug === 'product-admin' ||
$role->slug === 'logistic-admin') {
return redirect()->route('customer.login-reset');
}
}
foreach (auth()->user()->roles as $role) {
if ($role->slug === 'customer') {
return redirect()->route('customer.dashboard');
}
}
}
return $next($request);
}
}
// User.php
public function role()
{
return $this->belongsTo('App\Models\Role');
}
// Role.php
public function users()
{
return $this->hasMany('App\Models\User');
}
然后你可以像这样访问slug...
$user->role->slug;
推荐阅读
- json - 从 Oracle PL/SQL 中的表生成 json 文件
- html - 使用引导程序将两个表放在 html 中
- amazon-web-services - 如何在没有名称的情况下将文件上传到 S3
- c++ - libtorch 中 numpy.spacing(1) 的等价物是什么?
- android - 尝试从 JSON 文件的最后一个条目检索数据时出错
- javascript - 如何从反应数组返回中删除双引号?
- javascript - 使用Javascript根据值更改表数据值颜色
- google-cloud-platform - 如何使用谷歌云视频智能名人识别?
- algorithm - 修改归并排序以计算反转次数
- javascript - 成功将文件上传到MySQL中的字节数组,但是下载时内容不可读