Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

auth:api intentando hacer api restful

Estas en el tema de auth:api intentando hacer api restful en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas a tod@s: Estoy empezando con Laravel 5.2, y necesito hacerme una API restful, el tema es que no consigo registrarme mediante json con el ...
  #1 (permalink)  
Antiguo 18/03/2016, 11:56
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
auth:api intentando hacer api restful

Buenas a tod@s:
Estoy empezando con Laravel 5.2, y necesito hacerme una API restful, el tema es que no consigo registrarme mediante json con el end point creado, a continuación explico los pasos que he seguido para ver si algo he hecho mal (seguro que si jeje).

1 Primero corro el "php artisan make:auth"
2 En routes.php establezco el prefijo de la API y el middleware que se va a usar:
Route::group(['prefix' => 'api/v1', 'middleware' => 'auth:api'], function () {
Route::auth();

Route::get('/home', 'HomeController@index');
});


3 seguidamente miro mis rutas
Código:
        | GET|HEAD | /                              |      | Closure                                                         |                |
|        | GET|HEAD | api/v1/home                    |      | App\Http\Controllers\HomeController@index                       | auth:api,auth  |
|        | GET|HEAD | api/v1/login                   |      | App\Http\Controllers\Auth\AuthController@showLoginForm          | auth:api,guest |
|        | POST     | api/v1/login                   |      | App\Http\Controllers\Auth\AuthController@login                  | auth:api,guest |
|        | GET|HEAD | api/v1/logout                  |      | App\Http\Controllers\Auth\AuthController@logout                 | auth:api       |
|        | POST     | api/v1/password/email          |      | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail | auth:api,guest |
|        | POST     | api/v1/password/reset          |      | App\Http\Controllers\Auth\PasswordController@reset              | auth:api,guest |
|        | GET|HEAD | api/v1/password/reset/{token?} |      | App\Http\Controllers\Auth\PasswordController@showResetForm      | auth:api,guest |
|        | GET|HEAD | api/v1/register                |      | App\Http\Controllers\Auth\AuthController@showRegistrationForm   | auth:api,guest |
|        | POST     | api/v1/register                |      | App\Http\Controllers\Auth\AuthController@register               | auth:api,guest |
+--------+----------+--------------------------------+------+-----------------------------------------------------------------+---------------

Nota: la verdad que eso de "auth:api,guest" me despista un poco, ¿que significa exactamente¿, usa el guard api o guest?.
4 Cambio en auth.php el default guard a "api".

5 Edito kernel.php

y esto es lo que tengo
Código:
<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
            'auth:api',
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}
Finalmente abro REST Console , plugin de chrome y pruebo con el end point para registrarse, es decir " api/v1/register ".
Le paso como "RAW Body":
Código:
{
"username": "pepe",
"email" : "[email protected]",
"password": "passcool"
}
y en content-Type: application/json

He editado para añadir más información:
He probado cambiando en routes.php esto:
Código:
Route::group(['prefix' => 'api', 'middleware' => ['auth:api', 'throttle:60,1']], function () {
    Route::auth();

    Route::get('/home', 'HomeController@index');
});
Es decir he añadido "throttle:60,1" , entiendo que esto sirve para limitar el número de peticiones posible de los recursos, pero sigo con el mismo problema descrito anteriormente.


Siempre recibo un Status Code: 401 , y el mensaje "Unauthorized"
Gracias de antemano.
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 18/03/2016, 12:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: auth:api intentando hacer api restful

Y que método estas usando para autentificar tu acceso a la api ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 18/03/2016, 14:32
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Cita:
Iniciado por hhs Ver Mensaje
Y que método estas usando para autentificar tu acceso a la api ?
Buenas, al verdad que no tengo muy claro a que te refieres, como middleware pongo ese que puedse ver en el post "auth:api", pero no se que quieres decir con método, entendía que ese era el "método" que se encargaba del tema. ¿Igual te refierse a los request?, la verdad que no entiendo muy bien que me quieres decir :), sorry
Un saludo
__________________
Videotutoriales de Drupal

Última edición por Dundee; 18/03/2016 a las 14:46
  #4 (permalink)  
Antiguo 18/03/2016, 17:58
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: auth:api intentando hacer api restful

Te recomiendo leer la documentación oficial y para algo rápido este articulo te ayuda a implementar autentificación mediante token.
https://gistlog.co/JacobBennett/090369fbab0b31130b51
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 19/03/2016, 02:05
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Cita:
Iniciado por hhs Ver Mensaje
Te recomiendo leer la documentación oficial y para algo rápido este articulo te ayuda a implementar autentificación mediante token.
https://gistlog.co/JacobBennett/090369fbab0b31130b51
Gracias por tu respuesta, pero la documentación oficial es lo primero que siempre me leo , postear es mi última opción, y respecto al artículo https://gistlog.co/JacobBennett/090369fbab0b31130b51 junto con otros 10 ya me lo había leído; gracias de todos modos.

Voy a optar finalmente por trabajar con la versión 5.1, ya que estoy siguiendo un curso de UDEMY y utilizan dicha versión para hacer la REST.

Un saludo
__________________
Videotutoriales de Drupal
  #6 (permalink)  
Antiguo 19/03/2016, 13:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: auth:api intentando hacer api restful

Si vas optar por la versión 5.1 utiliza Dingo te va a ayudar a crear tu API: https://github.com/dingo/api
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 20/03/2016, 13:46
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Cita:
Iniciado por hhs Ver Mensaje
Si vas optar por la versión 5.1 utiliza Dingo te va a ayudar a crear tu API: https://github.com/dingo/api
La verdad que llevo casi 3 dias con esto y no hay manera, el error que ahora recibo (con Laravel 5.1) es este:

{
"error": "invalid_request",
"error_description": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed. Check the \"grant_type\" parameter."
}

Por mucho que leo en la docu y en los vídeos que me he visto no encuentro mi error, pero de todas formas con una búsqueda en Google he encontrado mucha gente con el mismo problema, por lo que voy a seguir tu consejo y a probar con Dingo.

Un saludo
__________________
Videotutoriales de Drupal
  #8 (permalink)  
Antiguo 20/03/2016, 14:44
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Cita:
Iniciado por hhs Ver Mensaje
Si vas optar por la versión 5.1 utiliza Dingo te va a ayudar a crear tu API: https://github.com/dingo/api
Estoy itentando hacerlo con Dingo siguiendo paso a paso las instrucciones, pero no tengo claro donde se deben crear las URLS con este componente:

¿Esto dónde se hace¿, en routes.php se crean las urls, pero eso de APP lógicamente si lo meto allí me da error, porque app no existe, la verdad estoy un poco confuso.
Código:
Now you can generate a URL to the named route.

app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('users.index');
Edito para añadir más detalle, mi archivo routes.php ahora mismo está así:

Código:
Route::get('/', function () {
    return view('welcome');
});

$api = app('Dingo\Api\Routing\Router');



$api->version('v1', function ($api) {
    $api->group(['middleware' => 'foo'], function ($api) {
        // Endpoints registered here will have the "foo" middleware applied.
     //   $api->get('users', 'App\Http\Controllers\UserController@index');
        $api->get('users', ['as' => 'users.index', 'uses' => 'App\Http\Controllers\UserController@index']);

    });
});
Si hago
php artisan route:list o php artisan api:routes , no ha creado los endpoints.

Un saludo y gracias de antemano, si lo resuelvo explicaré aquí con detalle como lo he hecho.
__________________
Videotutoriales de Drupal
  #9 (permalink)  
Antiguo 20/03/2016, 15:27
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Me autorespondo , si añado al final esto:
app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('users.index');

Si "coge" las rutas.
Este vídeo me ayudo junto con la docu a "arrancar" con esto:
https://www.youtube.com/watch?v=V2Gh...Ys-cft&index=3
__________________
Videotutoriales de Drupal

Última edición por Dundee; 20/03/2016 a las 15:46
  #10 (permalink)  
Antiguo 21/03/2016, 12:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: auth:api intentando hacer api restful

Te recomiendo que veas este workshop http://hechoenlaravel.com/w/api-con-dingo-y-oauth2
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #11 (permalink)  
Antiguo 21/03/2016, 12:40
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Cita:
Iniciado por hhs Ver Mensaje
Si vas optar por la versión 5.1 utiliza Dingo te va a ayudar a crear tu API: https://github.com/dingo/api
Estoy itentando hacerlo con Dingo siguiendo paso a paso las instrucciones, pero no tengo claro donde se deben crear las URLS con este componente:

¿Esto dónde se hace¿, en route.php se crean las urls, pero eso de APP lógicamente si lo meto allí me da error, porque app no existe, la verdad estoy un poco confuso.
Código:
Now you can generate a URL to the named route.

app('Dingo\Api\Routing\UrlGenerator')->version('v1')->route('users.index');
Un saludo y gracias de antemano, si lo resuelvo explicaré aquí con detalle como lo he hecho.

Gracias tomo nota, un saludo.
__________________
Videotutoriales de Drupal
  #12 (permalink)  
Antiguo 22/03/2016, 11:22
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: auth:api intentando hacer api restful

Todas las rutas se colocan en el archivo route.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #13 (permalink)  
Antiguo 30/03/2016, 10:26
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: auth:api intentando hacer api restful

Cita:
Iniciado por hhs Ver Mensaje
Todas las rutas se colocan en el archivo route.php
Gracias, siento la demora, pero he estado de vacaciones una semanilla.
Ya me funciona y me devuelve el token, lo extraño es que siempre me devuelve un array json con el nombre "dingo" .

Algo así , y sucede con todos los endpoints, he intentando buscar como personalizar esto pero no lo he conseguido hasta ahora.
Código:
dingo {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImlzcyI6Imh0dHA6XC9cL2xv"}
ya que en este caso me sería mejor que devolviera simplemente {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ zdWIiOjEsImlzcyI6Imh0dHA6XC9cL2xv"}

Seguramente es algo que yo no se hacer, pero tampoco consigo "personalizar" los mensajes de error etc..., he seguido estos pasos:
https://github.com/dingo/api/wiki/Er...tion-responses

Y JWT está aquí explicado
https://github.com/tymondesigns/jwt-...reating-Tokens

Un saludo
__________________
Videotutoriales de Drupal

Última edición por Dundee; 31/03/2016 a las 05:00

Etiquetas: laravel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:13.