Я использую 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;
}
}






Эта функция может помочь вам:
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']
];
}