У меня есть проект API laravel.Я хочу иметь возможность отправить запрос на вход в систему и получить токен в зависимости от некоторой пользовательской логикиЯ не использую базу данных, поэтому я не могу использовать аутентификацию по умолчанию.
Я настроил поставщика с именем AuthCustomProvider.
namespace App\Providers;
use Auth;
use App\Authentication\UserProvider;
use Illuminate\Support\ServiceProvider;
class AuthCustomProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Auth::provider('custom_auth', function($app, array $config) {
return new UserProvider();
});
}
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
//
}
}
Затем я добавил это в файл config / app.php в массиве провайдеров:
'providers' => [
App\Providers\AuthCustomProvider::class,
Затем я добавил свой драйвер для пользовательских провайдеров в файл config / auth.php вМассив провайдеров:
'providers' => [
'users' => [
'driver' => 'custom_auth',
],
],
Поскольку я не использую базу данных, я вынул свойство модели
Наконец, я создал папку с именем App / Authentication, в которую я поместил свой файл UserProvider.php, в которыйэто:
<?php
namespace App\Authentication;
use Illuminate\Contracts\Auth\UserProvider as IlluminateUserProvider;
class UserProvider implements IlluminateUserProvider
{
/**
* @param mixed $identifier
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveById($identifier)
{
// Get and return a user by their unique identifier
}
/**
* @param mixed $identifier
* @param string $token
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByToken($identifier, $token)
{
// Get and return a user by their unique identifier and "remember me" token
}
/**
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param string $token
* @return void
*/
public function updateRememberToken(Authenticatable $user, $token)
{
// Save the given "remember me" token for the given user
}
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials)
{
// Get and return a user by looking up the given credentials
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
* @return bool
*/
public function validateCredentials(Authenticatable $user, array $credentials)
{
// Check that given credentials belong to the given user
}
}
Итак, наконец, я делаю функцию на контроллере входа.Вот к чему обращается API-интерфейс:
public function Login(Request $request)
{
$user = Consultant::lookup('UserId', 1);
//Returns collection of user details (user id, username etc)
//Logic will go here in the future
$logThemIn = true;
if ($logThemIn)
{
auth()->login($user);
//return oauth2 token
}
}
Так вот, где я сейчас нахожусь, если я запускаю это, я получаю сообщение об ошибке:
'Объявление приложения \ Аутентификация \ UserProvider:: updateRememberToken (App \ Authentication \ Authenticatable $ user, $ token) должен быть совместим с Illuminate \ Contracts \ Auth \ UserProvider :: updateRememberToken (Illuminate \ Contracts \ Auth \ Authenticatable $ user, $ token) '
Я новичок в Laravel, и там не много учебников, что я пытаюсь сделать, что я могу найти.Любая помощь очень ценится