validate([ 'username' => 'required', 'password' => 'required', ]); $user = PartyUser::where('username', $request->input('username'))->first(); if (!$user || !Hash::check($request->input('password'), $user->password)) { return $this->response()->fail('用户名或密码错误'); } // 更新第三方账户 $openid = $request->input('openid'); $open_type = $request->input('open_type'); if ($openid && $open_type) { $this->updateUserSocialite($user, $openid, SocialiteType::from($open_type)); } $token = $user->createToken('api')->plainTextToken; return $this->response()->success(['token' => $token, 'user' => $user]); } protected function updateUserSocialite($user, $openid, $type) { // 清空以前绑定的 UserSocialite::where([ 'type' => $type, 'user_type' => $user->getMorphClass(), 'user_id' => $user->id, ])->update(['user_id' => null]); UserSocialite::updateOrCreate([ 'type' => $type, 'user_type' => $user->getMorphClass(), 'openid' => $openid, ], [ 'user_id' => $user->id, ]); } }