首页 > 解决方案 > Laravel - How to Login with either email or phone using Laravel resful api

问题描述

In my Laravel-8 restful API application, I am using Laravel Passport.

I have this code in my request rules:

public function rules()
{
    return [
    'emailOrPhone' => 'required|string',
    'password' => 'required|string',
    'remember_me' => 'boolean'
    ];
}

Controller:

public function login(LoginRequest $request)
{
    try{
        $userCred = User::where('email', $request->emailOrPhone)
        ->orWhere('mobile_number', $request->emailOrPhone)
        ->first();
        $credentials = request(['email', 'password']);
        $credentials['active'] = 1;
        $credentials['deleted_at'] = null;
        if(!Auth::attempt($credentials))
            return response()->json([
                'message' => 'Unauthorized'
            ], 401);
        $user = $request->user();
        $tokenResult = $user->createToken('iDriver');
        $token = $tokenResult->token;
        if ($request->remember_me)
            $token->expires_at = Carbon::now()->addWeeks(1);
        $token->save();
        return response()->json([
            'access_token' => $tokenResult->accessToken,
            'token_type' => 'Bearer',
            'expires_at' => Carbon::parse($tokenResult->token->expires_at)->toDateTimeString()
        ]);
    }catch(\Exception $e) {
        return $this->error($e->getMessage(), $e->getCode());
    }
}

How do I re-write the Controller code, so that users can Login with either email or mobile_number?

Thanks

标签: laravel

解决方案


推荐阅读