Hola a todos. Cordial saludo.
No he podido integrar a
JWT con laravel 5. LLevo varios días en eso pero la documentación que he encontrado no funciona.
Estoy probando las peticiones a los controladores con la
aplicación postman (Complemento de google chrome)
Y solo he logrado que me funcione bien el método que hace el
registro de usuarios: Código PHP:
public function store()
{
$credentials = $this->request->only('name','email', 'password');
$credentials['password'] = Hash::make($credentials['password']);
try {
$user = User::create($credentials);
} catch (Exception $e) {
return response()->json([
'error' => 'User already exists.'
],HttpResponse::HTTP_CONFLICT
);
}
$token = JWTAuth::fromUser($user);
return response()->json(compact('token'));
}
Y este método que es el de
iniciar sesión (JWT le asigna un token al usuario si existe en la base de datos)
login
Código PHP:
public function store()
{
$credentials = $this->request->only('email', 'password');
if( !$token = JWTAuth::attempt($credentials)) {
return response()->json([
'Success' => false
], HttpResponse::HTTP_UNAUTHORIZED
);
}
return response()->json(compact('token'));
}
Hasta acá todo bien.
Pero en el archivo routes cuando voy a utilizar el Middleware JWT, para hacer la
validación del token, este no hace ninguna validación y pasa de largo a ejecutar la función.
Código PHP:
Route::get('/prueba-jwt-auth-restringido', [
'before' => 'jwt-auth',
function () {
return 'Hola JWT :)';
}
]);
En la siguiente ruta, igualmente el,
'before' => 'jwt-auth' no hace
absolutamente nada, halla o no halla token.
Código PHP:
Route::get('/prueba-jwt-auth-restringido', [
'before' => 'jwt-auth',
function () {
$token = JWTAuth::getToken();
//$user = JWTAuth::toUser($token);
var_dump($token); // False
}
]);
Pero ademas cuando envío el token a través de la
aplicación POSTMAN, es como si no lo enviara, y créanme con todo lo que he tenido que leer estoy casi seguro que lo estoy enviando bien:
(
En la imagen cambie token por Autorization pero tampoco funciona)
En mi archivo kernel e omitido los CORS por que no me permitían hacer peticiones desde POSTMAN
Código PHP:
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
// 'gimnasio\Http\Middleware\VerifyCsrfToken',
// 'gimnasio\Http\Middleware\Cors',
// 'Barryvdh\Cors\Middleware\HandleCors',
];
A pesar de colocar las siguientes cabeceras CORS tampoco me funciono nunca y estoy decepcionandome un poco con laravel 5. Se los juro. Es mi framework preferido.
Código PHP:
$response = $next($request);
$response->headers->set('Access-Control-Allow-Origin' , '*');
$response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With');
return $response;
Agradezco su ayuda, llevo varios días con este problema y no encuentro algo solido que funcione realmente. Y de verdad quisiera poder integrar a JWT para poder utilizar Angularjs de la mejor manera.