Laravel: как войти в систему при использовании Passport и Graphql?

Я использую Graphql (laravel-graphql) в laravel, я пишу компонент входа в систему и хочу использовать паспорт laravel, в приведенном ниже коде используется JWTAuth.

Вопрос:
Как записать метод resolve() при использовании Паспорта?

LoginMutation.php

namespace App\GraphQL\Mutation;

use Folklore\GraphQL\Error\AuthorizationError;
use Folklore\GraphQL\Support\Mutation;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use GraphQL;
use JWTAuth;
use Auth;

class LoginMutation extends Mutation
{
    protected $attributes = [
        'name' => 'Login',
        'description' => 'A mutation for user login'
    ];

    public function type()
    {
        return GraphQL::type('User');
    }

    public function args()
    {
        return [
            'email' => ['name' => 'email', 'type' => Type::nonNull(Type::string())],
            'password' => ['name' => 'password', 'type' => Type::nonNull(Type::string())],
        ];
    }

    public function rules()
    {
        return [
            'email' => ['required', 'email'],
            'password' => ['required']
        ];
    }

    public function resolve($root, $args, $context, ResolveInfo $info)
    {
        $credentials = [
            'email' => $args['email'],
            'password' => $args['password']
        ];
        if (!$token = JWTAuth::attempt($credentials)) {
            throw new AuthorizationError('Invalid Credentials.');
        }
        $user = Auth::user();
        $user->token = $token;
        return $user;
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
389
1

Ответы 1

Эта функция может помочь вам:

public function resolve($root, $args, $context, ResolveInfo $info){
    $user = User::where('email', $args['email'])->first();
    if (!$user || !Hash::check($args['password'], $user->password)){
        throw new AuthorizationError('Invalid Credentials.');
    }

    $http = new Client;

    $response = $http->post(url('oauth/token'), [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '2',
            'client_secret' => 'your-client-secret-key',
            'username' => $args['email'],
            'password' => $args['password'],
            'scope' => ''
        ]
    ]);

    return $user;
}

Также не забудьте добавить use GuzzleHttp\Client; в начало файла LoginUserMutation.

Кроме того, при определении функции правил вы можете расширить правило электронной почты с помощью:

public function rules()
{
    return [
        'email' => ['required', 'email', 'exists:users'],
        'password' => ['required']
    ];
}

Другие вопросы по теме