0

我开发了两个 API,一个负责创建用户,这个注册 api 工作正常,数据也存储在数据库中,现在我正在编写登录 api,它将检查用户是否存在于数据库中,如果用户电子邮件和密码应该与数据库内容匹配它应该返回访问令牌,我没有得到我在哪里弄错了请帮我解决这个问题..

UserController.php

public function login(UserLoginRequest $request): array
    {
        $user=app(UserLoginAction::class)->run($request);
        return $this->transform($user,UserLoginTransformer::class);
    }

用于验证目的的 userLogin 请求 UserLoginRequest.php

class UserLoginRequest extends Request
{
    
    protected array $access = [
        'permissions' => '',
        'roles'       => '',
    ];

    /**
     * Id's that needs decoding before applying the validation rules.
     */
    protected array $decode = [
        // 'id',
    ];

   
    protected array $urlParameters = [
        // 'id',
    ];

    /**
     * Get the validation rules that apply to the request.
     */
    public function rules(): array
    {
        return [
            'email'=>'required|email',
            'password'=>'required'
        ];
    }

    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return $this->check([
            'hasAccess',
        ]);
    }
}

UserLoginAction.php


class UserLoginAction extends Action
{
    public function run(UserLoginRequest $request)
    {
        
        $user=app(CreateLoginTask::class)->run(
            $request->email,
            $request->password
        );
        return $user;
    }
}

CreateLoginTask.php

<?php

namespace App\Containers\TravelBlogs\UserContainer\Tasks;

use App\Containers\TravelBlogs\UserContainer\Models\UserModel;
use App\Ship\Parents\Tasks\Task;
use JWTAuth;

class CreateLoginTask extends Task
{
    protected UserModel $repository;
    public function __construct(UserModel $repository)
    {
        $this->repository = $repository;
    }

    public function run(string $email,string $password)
    {   
       $user=$this->repository->check(['email'=>$email,'password'=>$password]);
        $userFinder = UserModel::where('email', $email)->first();
        if (!$userFinder) {
         return ['Not found'];
        }
        $token = JWTAuth::fromUser($userFinder);
        return response()->json([
            'message' => 'succesfully logged in...',
            'token' => $token
        ]);
    }
}

userLoginTransformer.php

<?php

namespace App\Containers\TravelBlogs\UserContainer\UI\API\Transformers;

use App\Containers\TravelBlogs\UserContainer\Models\UserModel;
use App\Ship\Parents\Transformers\Transformer;

class UserLoginTransformer extends Transformer
{
    /**
     * @var  array
     */
    protected $defaultIncludes = [

    ];

    /**
     * @var  array
     */
    protected $availableIncludes = [

    ];

    public function transform(UserModel $usermodel): array
    {
        $response = [
            'message'=>"User login successfully",
            'object' => $usermodel->getResourceKey(),
            'id' => $usermodel->getHashedKey(),
            'created_at' => $usermodel->created_at,
            'updated_at' => $usermodel->updated_at,
            'readable_created_at' => $usermodel->created_at->diffForHumans(),
            'readable_updated_at' => $usermodel->updated_at->diffForHumans(),

        ];

        $response = $this->ifAdmin([
            'real_id'    => $usermodel->id,
            // 'deleted_at' => $usermodel->deleted_at,
        ], $response);

        return $response;
    }
}

4

0 回答 0