Dingo API con Passport

Para aquellos que no conocen sobre Dingo API (https://github.com/dingo/api) es un paquete para Laravel y Lumen que nos da unas herramientas muy útiles para el desarrollo de REST APIs, nos ayuda a versionar rutas, transformar respuestas, manejar errores entre otras cosas (ver: https://laraveles.com/series/api-con-dingo-y-oauth2/).

Desde Laravel 4.2 he venido usando este paquete por muchas razones, una de ellas es la autenticación, el paquete nos proporciona una forma de tener varios métodos de autenticación para diferentes endpoints en el mismo API, puedo tener varios endpoints protegidos con una autenticación básica, o con un JWT y hasta oAuth2, pero no se detiene ahí, uno puede crear sus propios proveedores para sistemas legacy o que tengan una forma distinta de autenticación.

Cuando llego passport (https://laravel.com/docs/5.4/passport), la librería usada para crear el servidor oAuth2 quedo obsoleta, por ende había que encontrar la forma de poder usar Passport en Dingo API. Como se hace? bueno en realidad es muy sencillo.

Teniendo Passport y Dingo API instalado, lo único que debemos hacer es crear un proveedor de autenticación así

Como se pueden dar cuenta, esta clase implementa la interfaz \Dingo\Api\Contract\Auth\Provider y tiene un método authenticate. En este método es donde nosotros debemos decidir como autenticar el request, en nuestro caso estamos usando el guard API que es el que usa Passport, este método debe retornar una instancia de User si la autenticación pasa y si no debe generar una exception Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException.

Cuando ya tenemos esto, podemos decirle a dingo que lo use en un service provider así:

Como pueden ver estamos creando un provider de autenticación llamado passport que ahora podemos usar en las rutas de Dingo:

Ya con esto, podremos usar Passport con Dingo API, si deseas ver una implementación, revisa mi Laravel API Starter Kit en la rama master que retorna el poder de Dingo API para que inicies tu siguiente API.

Nota: Por favor tengan es cuenta que la rama master es la version 3.0 del starter kit que estoy trabajando aún y no ha sido oficialmente publicada, esta nueva version trae de nuevo el poder de Dingo y tiene este provider ya configurado y listo para usar

Feliz programación!

A single golf clap? Or a long standing ovation?

By clapping more or less, you can signal to us which stories really stand out.