cómo cambiar la columna api_token en token guard

Laravel 5.5

Quiero cambiar la dirección de la ficha api que se usó en TokenGaurd , así que creé una guardia personalizada llamada CafeTokenGaurd que extiende TokenGuard, yo defino la función __construct en ella como lo que quiero, algo como esto:

public function __construct(UserProvider $provider, Request $request) { parent::__construct($provider, $request); $this->inputKey = 'api_key'; // I want changing this part $this->storageKey = 'api_key'; } 

Ahora quiero definir api_key de relación con la tabla de usuarios como esta:

 device_user table -> token 

Quiero definir tokens específicos para cada dispositivo que el usuario tenga, y quiero configurar la clave de entrada de API y la clave de almacenamiento en esta columna en la tabla dinámica entre usuarios y dispositivos,

como debería esto ?!

Gracias

Debido a que necesita cambiar la forma en que el usuario se recupera de la base de datos, realmente necesita crear y usar un UserProvider personalizado, no un Guard personalizado. Solo necesitará la protección personalizada si desea renombrar la clave de entrada o la clave de almacenamiento de api_token .

Por lo tanto, necesitará una nueva clase UserProvider personalizada que sepa cómo recuperar a su usuario con las credenciales (token), y tendrá que decirle a Auth que use su nueva clase UserProvider personalizada.

En primer lugar, suponiendo que todavía está utilizando Eloquent, comience por crear una nueva clase UserProvider que amplíe la clase base EloquentUserProvider . En este ejemplo, se crea en la app/Services/Auth/MyEloquentUserProvider.php . En esta clase, deberá anular la función retrieveByCredentials con los detalles sobre cómo recuperar al usuario con el token proporcionado.

 namespace App\Services\Auth; use Illuminate\Auth\EloquentUserProvider; class MyEloquentUserProvider extends EloquentUserProvider { /** * Retrieve a user by the given credentials. * * @param array $credentials * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function retrieveByCredentials(array $credentials) { if (empty($credentials)) { return; } // $credentials will be an array that looks like: // [ // 'api_token' => 'token-value', // ] // $this->createModel() will give you a new instance of the class // defined as the model in the auth config for your application. // Your logic to find the user with the given token goes here. // Return found user or null if not found. } } 

Una vez que haya creado su clase, debe informar a Auth respecto. Puede hacerlo en el método boot() en su proveedor de servicios AuthServiceProvider . Este ejemplo usará el nombre “myeloquent”, pero puede usar lo que quiera (excepto “eloquent” y “base de datos”).

 public function boot() { $this->registerPolicies(); Auth::provider('myeloquent', function($app, array $config) { return new \App\Services\Auth\MyEloquentUserProvider($app['hash'], $config['model']); }); } 

Y, por último, debe decirle a Auth que use su nuevo proveedor de usuarios myeloquent . Esto se hace en el archivo de configuración config/auth.php .

 'providers' => [ 'users' => [ 'driver' => 'myeloquent', // this is the provider name defined above 'model' => App\User::class, ], ], 

Puede leer más sobre cómo agregar proveedores de usuario personalizados en la documentación aquí .