This bundle comes with a built-in token encoder, based on the lcobucci/jwt library. If he doesn't suit your needs, you can replace it with your own encoder service. Here's an example implementing a nixilla/php-jwt library based encoder.
// src/App/Encoder/NixillaJWTEncoder.php
namespace App\Encoder;
use JWT\Authentication\JWT;
use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;
use Lexik\Bundle\JWTAuthenticationBundle\Exception\JWTEncodeFailureException;
use Lexik\Bundle\JWTAuthenticationBundle\Exception\JWTDecodeFailureException;
/**
* NixillaJWTEncoder
*
* @author Nicolas Cabot <n.cabot@lexik.fr>
*/
class NixillaJWTEncoder implements JWTEncoderInterface
{
private $key;
public function __construct(string $key = 'super_secret_key')
{
$this->key = $key;
}
/**
* {@inheritdoc}
*/
public function encode(array $data)
{
try {
return JWT::encode($data, $this->key);
}
catch (\Exception $e) {
throw new JWTEncodeFailureException(JWTEncodeFailureException::INVALID_CONFIG, 'An error occurred while trying to encode the JWT token.', $e);
}
}
/**
* {@inheritdoc}
*/
public function decode($token)
{
try {
return (array) JWT::decode($token, $this->key);
} catch (\Exception $e) {
throw new JWTDecodeFailureException(JWTDecodeFailureException::INVALID_TOKEN, 'Invalid JWT Token', $e);
}
}
}
# config/packages/lexik_jwt_authentication.yaml
lexik_jwt_authentication:
# ...
encoder:
service: App\Encoder\NixillaJWTEncoder
Note
You can use the lexik_jwt_authentication.encoder.signature_algorithm
parameter
that represents the corresponding configuration option by injecting
this as argument of the encoder's service.
See the :doc:`configuration reference <1-configuration-reference>` for more information.