2017-06-16 52 views
1

我使用Tymon的JWTAuth以無狀態方式將應用程序連接到api,直到代幣。但問題是,當我解碼令牌時,在有效負載數據上,iss值是API url本身。Laravel或Lumen JWT刪除默認聲明

如何更改該值將密鑰從傳遞到令牌中移除?

這裏的令牌的解碼值(我只是編輯的值在這裏例如目的)

{ 
    "iss": "http://localhost.com/api/", 
    "iat": 1111111111, 
    "exp": 2222222222, 
    "nbf": 3333333333, 
    "jti": "xxxxxxxxxxxxxx", 
    "sub": 1234, 
    "foo": "bar", 
    "baz": "bob" 
} 

我可以添加自定義的要求,但無法去除iss關鍵。

$token = $jwt->attempt($request->only(['username', 'password'])); 

$customClaims = ['foo' => 'bar', 'baz' => 'bob']; 
$payload = $jwtFactory->customClaims($customClaims)->make(true); 
$token = $jwt->encode($payload); 

if ($token === false) { 
    echo 'invalid credentials'; 
} else { 
    echo 'valid user'; 
} 

我甚至嘗試: $jwtFactory->iss('http://example.com')->foo(['lol'])->make();

,只有foo關鍵或者說「自定義聲明」的價值觀正在改變,但不是默認的索賠。但如documentation所述,設置時可以更改默認聲明值。

+0

你從jwt config的required_claims數組中刪除了嗎? –

+0

@JigarShah是的,我做了,它仍然包含默認聲明。 – basagabi

+0

是的,它會根據PayloadFactory中的defaultClaims –

回答

0

我能夠通過設置自定義聲明中的自定義聲明的值是寫默認債權價值的變化默認索賠。

$customClaims = ['iss' => 'xxx', 'baz' => 'bob']; 
$payload = $jwtFactory->customClaims($customClaims)->make(); 

由此,的iss(默認權利要求)中的值現在是xxx。這似乎很奇怪,因爲在documentation上,它有不同的方式來重寫默認聲明,但這種方式不起作用。

+1

我做了同樣的事情:)乾杯! –

0

用於設置ISS值設置爲null或其他任何你可能需要修改iss()

public function iss() 
    { 
     return NULL; 
     // return $this->request->url(); 
    } 

後,你會得到解碼令牌就像

array:6 [ 
    "sub" => 4 
    "iss" => null // I have set value to null 
    "iat" => 1497603439 
    "exp" => 1497963439 
    "nbf" => 1497603439 
    "jti" => "O6zdDsWKt3X7hszh" 
] 

編輯

能你可以試試這個:

if (!$token = JWTAuth::attempt($credentials, array('iss' => NULL))) 

我已經測試過,它爲我工作。也是因爲這個,我們也不需要在包文件

希望的作品

+0

是的,試過了,它工作,但我認爲這不是直接修改它的最好方法。有什麼方法可以通過不觸及代碼庫來覆蓋它? – basagabi