2016-09-21 65 views
3

我試圖修改laravel中JWT的身份驗證方法的json輸出,使其顯示角色爲數組。JWT Laravel - 修改json輸出的內容

所以在這裏我

created_at : 「2016年8月18日十二時33分14秒」 電子郵件 : 「[email protected]」 ID : last_logged_in : 「2016年9月21日16時37分35秒」 名 : 「Dhenn」 角色 : 「{0:一DMIN, 1:用戶「} 的updated_at : 」2016年9月21日16時37分35秒「

但我不能。我試圖修改我的jwt.auth php文件,但它返回了一個錯誤,我設置了一個非屬性對象。

這裏是智威湯遜 - 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; 
} 

回答

1

你說這是你的用戶對象:

{ email : "[email protected]" 
    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應該是一個對象不是一個數組。通過這種方法,您可以嘗試通過此對象的每個屬性,但是我想你想要迭代角色數組。 這應該是這樣的:

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)

0

好的,謝謝你的幫助。我想出了答案。

這是我的代碼終於工作。

public function authenticate($token = false) 
{ 
    $id = $this->getPayload($token)->get('sub'); 

    if (! $this->auth->byId($id)) { 
     return false; 
    } 
    $user = $this->auth->user(); 
    $user->roles = explode(",", $user->roles); 
    return $user; 
} 
+0

現在我明白了,你想要的東西 - 的JSON編碼的角色角色的列表(見上面我更新的答案)。順帶回來,展示你自己的解決方案! – everyman