JWT Laravel - 修改json输出的内容

时间:2016-09-21 16:45:03

标签: php arrays laravel jwt

我正在尝试修改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;
}

3 个答案:

答案 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