Как войти по телефону или электронной почте в Laravel паспорт? - PullRequest
1 голос
/ 17 марта 2020

Идея заключается в том, что мне нужно войти через email or phone. Я использовал этот метод в Моделе пользователя:

public function findForPassport($identifier)
{
    return $this->where('email', $identifier)->orWhere('phone', $identifier)->first();
}

, но при входе в систему отображается ошибка!

код моего контроллера:

public function login(Request $request)
{

    $request->validate([
        'email' => 'required|string|email',
        'password' => 'required|string',
        'remember_me' => 'boolean'
    ]);

    $credentials = request(['email', 'password']);
    if(!Auth::attempt($credentials))
        return response()->json([
            'message' => 'Unauthorized'
        ], 401);

    $user = $request->user();
    $tokenResult = $user->createToken('Personal Access Token');
    $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()
    ]);
}

Я знаю, что есть проблема в $credentials, но не знаю, как это сделать, будь то адрес электронной почты или номер телефона

любой помогите пожалуйста?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

попробуйте это:

public function login(Request $request)
{
    $user = User::where('email', $request->emailOrPhone)
                    ->orWhere('phone', $request->emailOrPhone)
                    ->first();
    if($user){
        if (Hash::check($request->password, $user->password)) {

            $tokenResult = $user->createToken('Personal Access Token');
            $token = $tokenResult->token;
            if ($request->remember_me)
                $token->expires_at = Carbon::now()->addWeeks(1);
            $token->save();
            return response()->json([
                'access_token' => $tokenResult->accessToken,
                'expires_at' => Carbon::parse(
                    $tokenResult->token->expires_at
                )->toDateTimeString()
            ]);

        } else {
            $response = ['Password incorrect'];
            return response($response, 422);
        }
    }else {
        $response = ['User doesn\'t exist'];
        return response($response, 422);
    }

}
0 голосов
/ 17 марта 2020

Вот как я использую

 /**
 * Login user and create token
 *
 * @param  [string] email
 * @param  [string] password
 * @param  [boolean] remember_me
 * @return [string] access_token
 * @return [string] token_type
 * @return [string] expires_at
 */
public function login(Request $request)
{
    $request->validate([
        'email'       => 'required|string|email',
        'password'    => 'required|string',
        'remember_me' => 'boolean',
    ]);
    $credentials = request(['email', 'password']);
    if (!Auth::attempt($credentials)) {
        return response()->json([
            'message' => 'Unauthorized',
        ], 401);
    }

    $user        = $request->user();
    $tokenResult = $user->createToken('Personal Access Token');
    $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(),
    ]);
}
...