Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

noblemfd's avatar

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

0 likes
4 replies
tykus's avatar

What are you doing with this data?

$userCred = User::where('email', $request->emailOrPhone)
        ->orWhere('mobile_number', $request->emailOrPhone)
        ->first();
noblemfd's avatar

@tykus - I was trying to use it to reference the Request Rules shown below. But I got stuck.

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

I missed your comment about Passport above... do you understand that this means no password auth in your system

Please or to participate in this conversation.