I got Untrusted Host error when generate token. I need to use jwt for multiple auth.
PHP - 7.2.5
Laravel - 7.0
you do need descibre your applications versions, example PHPX, LARAVEL 7 or 8
Create a folder into of app folder, with name called jwt and insert it
`
namespace App\jwt;
use \Tymon\JWTAuth\Facades\JWTFactory;
use \Tymon\JWTAuth\Facades\JWTAuth;
/**
class JWTProvider
{
private static $data = array();
private $resq;
private static $token;
function __construct($request)
{
$this->resq = $request;
}
public static function credentials($chains = array())
{
if (!empty($chains)) {
self::$data['sub'] = env('API_ID');
self::$data = array_merge(self::$data, $chains);
}
return app(JWTProvider::class);
}
public static function key($token)
{
self::$token = $token;
return app(JWTProvider::class);
}
public function encode()
{
$payload = JWTFactory::claims(self::$data)->make();
return JWTAuth::encode($payload);
}
public function decode(): string
{
return JWTAuth::setToken(self::$token)->getPayload();
}
/**
* @param token required client side
* @example instance static JWTProvider::isValid("eyJ0eXAiOi...");
*/
public static function isValid($token)
{
try {
JWTAuth::setToken($token)->getPayload();
return true;
} catch (\Exception $e) {
return false;
}
}
}
`
api.php
Route::group(['prefix' => 'v1'], function () {
Route::middleware(['api'])->group(function($router){
Route::post('test', 'AuthServer\AuthController@login');
});
});
JWTProviderServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\jwt\JWTProvider;
use Illuminate\Http\Request;
class JWTProviderServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind(JWTProvider::class, function () {
return new JWTProvider(Request());
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
app.php
'providers' => [
App\Providers\JWTProviderServiceProvider::class,
];
USAGE
use App\jwt\JWTProvider;
try {
JWTAuth::setToken($token)->getPayload();
return true;
} catch (\Exception $e) {
return false;
}
JWTProvider::key("eyJ0eXAiOi...")->decode();
JWTProvider::credentials(array("key"=>"x"))->encode();
I still got error.
It's ok in my local. I face with that issues in production.
I generated token from Domain One. I sent that token to Domain2 and check the token using the same database and same jwt secrete key.
I use that middleware in Domain Two. ('middleware' => 'jwt.auth')
Error Logs
[2020-09-06 16:16:57] production.DEBUG: Untrusted Host "domain-name".
[2020-09-06 16:16:57] production.DEBUG: SymfonyComponent\HttpFoundation\Exception\SuspiciousOper
Stack trace:
#24 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\
I got it. I changed APP_URL in env.