如何在Laravel护照中使用电话或电子邮件登录?

时间:2020-03-17 17:03:49

标签: laravel laravel-passport

我需要通过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 个答案:

答案 0 :(得分:2)

尝试一下:

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);
    }

}

答案 1 :(得分:0)

这就是我的用法

 /**
 * 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(),
    ]);
}