Laravel 5.5 - 成功登录后如何将自定义值添加到 Auth::user()



我想在成功登录后添加一个自定义值(角色(到Auth::user()

我在\App\User中添加了以下代码

protected $attributes = ['role'];
protected $appends = ['role'];
public function getRoleAttribute() 
{
return $this->attributes['role'];
}    
public function setRoleAttribute($value)
{
$this->attributes['role'] = strtolower($value);
}

我从身份验证\登录控制器设置角色

function authenticated(Request $request, $user)
{ 
//I find $position based on some calculation
if($position == 1)
{
Auth::user()->role = 'director';
return redirect('supervisors');
}
}

我想在不同的页面中获取角色,例如$role = Auth::user()->role;(但这返回错误(

我怎样才能做到这一点?

我自己找到了解决方案。

由于我必须在不同的控制器中使用"role"值,并且数据库表中没有列来保留该值,因此我必须使用会话来存储该值。

当用户在身份验证\登录控制器进行身份验证时,我在会话中设置角色值

function authenticated(Request $request, $user)
{
if(xxxxx)
{
if(xxxx)
{
Auth::user()->role = 'director';
}
else
{
Auth::user()->role = 'manager';              
}
}
}

应用内\用户

public function getRoleAttribute() 
{
return Session::get('role', null);
}
public function setRoleAttribute($value)
{
Session::put('role', $value);
}

现在,我可以使用以下代码从任何地方访问角色值

Auth::user()->role

首先获取用户详细信息,然后更新用户拘留,例如

$user = User::findOrFail(Auth::user()->id);
$user->role  = "director";
$user->save();

试试这个代码

最新更新