Пользовательская аутентификация через API - PullRequest
0 голосов
/ 18 октября 2018

У меня есть проект 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, и там не много учебников, что я пытаюсь сделать, что я могу найти.Любая помощь очень ценится

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы забыли импортировать Authenticatable.Просто добавьте:

use Illuminate\Contracts\Auth\Authenticatable;
0 голосов
/ 18 октября 2018

Измените свой UserProvider на этот, который использует Illuminate\Contracts\Auth\Authenticatable вместо App\Authentication\Authenticatable, php загрузит класс из текущего пространства имен, если он не указан.

<?php

namespace App\Authentication;

use Illuminate\Contracts\Auth\UserProvider as IlluminateUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...