我正在尝试修改laravel中JWT的authenticate方法的json输出,以使其将角色显示为数组。
所以我在这里
created_at : “2016-08-18 12:33:14” 电子邮件 : “dhenn.espiritu@gmail.com” ID : 1 last_logged_in : “2016-09-21 16:37:35” 名称 : “Dhenn” 角色 : “{0:admin, 1:用户“} 的updated_at : “2016-09-21 16:37:35”
但我不能。我试图修改我的jwt.auth php文件但它返回了一个错误,我正在设置一个非属性对象。
这是jwt-auth.php
的当前设置public function authenticate($token = false)
{
$id = $this->getPayload($token)->get('sub');
if (! $this->auth->byId($id)) {
return false;
}
$user = $this->auth->user();
return $user;
}
虽然我在尝试这个时遇到错误:
public function authenticate($token = false)
{
$id = $this->getPayload($token)->get('sub');
if (! $this->auth->byId($id)) {
return false;
}
$user = $this->auth->user();
foreach ($user as $roles) {
$roles->roles = explode(",", $roles->roles);
}
return $user;
}
答案 0 :(得分:1)
你说这是你的用户对象:
{ email : "dhenn.espiritu@gmail.com"
id : 1
last_logged_in : "2016-09-21 16:37:35"
name : "Dhenn"
roles : "{0: admin, 1: user"}
updated_at : "2016-09-21 16:37:35" }
假设$this->auth->user();
返回此值,则您的迭代foreach ($user as $roles) {
不正确,因为$user
应该是对象而不是数组。这样你就可以尝试遍历这个对象的每个属性,但我想你想要对roles数组进行迭代。
这应该是这样的:
foreach($user->roles as $role) ... // assuming roles is an array
但是roles
似乎是一个编码的JSON字符串,所以你也需要解码它。
foreach(json_decode($user->roles) as $role) ...
或直接:$user->roles = json_decode($user->roles)
答案 1 :(得分:0)
尝试添加
protected $casts = ['roles' => 'array'];
到您的用户模型。这应该确保正确解析属性。 以下是文档https://laravel.com/docs/5.3/eloquent-mutators#attribute-casting
的链接答案 2 :(得分:0)
好的,谢谢大家的帮助。我想出了答案。
这里的代码终于有效了。
popen