diff --git a/app/Http/Controllers/OauthController.php b/app/Http/Controllers/OauthController.php index a9d40af4..ec44e3c0 100644 --- a/app/Http/Controllers/OauthController.php +++ b/app/Http/Controllers/OauthController.php @@ -125,7 +125,7 @@ class OauthController extends Controller } } - $newUser = $this->createUser($providerUsername, $providerEmail); + $newUser = $this->createUser($providerUsername, $providerEmail, $provider->id); $socialAccountData = [ 'user_id' => $newUser->id, 'provider_id' => $provider->id, @@ -139,7 +139,7 @@ class OauthController extends Controller return redirect($homeUrl); } - private function createUser($username, $email): User + private function createUser($username, $email, $providerId): User { if ($username) { if (User::query()->where('username', $username)->exists()) { @@ -154,6 +154,7 @@ class OauthController extends Controller 'email' => $email, 'password' => $password, 'password_confirmation' => $password, + 'provider_id' => $providerId, ]; $userRep = new UserRepository(); for ($i = 0; $i < 3; $i++) { diff --git a/app/Models/User.php b/app/Models/User.php index ce209c22..757cd696 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -185,7 +185,7 @@ class User extends Authenticatable implements FilamentUser, HasName 'username', 'email', 'passhash', 'secret', 'stylesheet', 'editsecret', 'added', 'enabled', 'status', 'leechwarn', 'leechwarnuntil', 'page', 'class', 'uploaded', 'downloaded', 'clientselect', 'showclienterror', 'last_home', 'seedbonus', 'downloadpos', 'vip_added', 'vip_until', 'title', 'invites', 'attendance_card', - 'seed_points_per_hour', 'passkey', 'auth_key', 'last_login', 'lang' + 'seed_points_per_hour', 'passkey', 'auth_key', 'last_login', 'lang', 'provider_id' ]; /** diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php index b58430f2..49aa037e 100644 --- a/app/Repositories/UserRepository.php +++ b/app/Repositories/UserRepository.php @@ -10,6 +10,7 @@ use App\Models\ExamUser; use App\Models\Invite; use App\Models\LoginLog; use App\Models\Message; +use App\Models\OauthProvider; use App\Models\Setting; use App\Models\Snatch; use App\Models\Torrent; @@ -89,7 +90,7 @@ class UserRepository extends BaseRepository /** * create user * - * @param array $params must: username, email, password, password_confirmation. optional: id, class + * @param array $params must: username, email, password, password_confirmation. optional: id, class, provider_id * @return User */ public function store(array $params) @@ -155,6 +156,13 @@ class UserRepository extends BaseRepository do_log("[CREATE_USER], specific id: " . $params['id']); $user->id = $params['id']; } + if (!empty($params['provider_id'])) { + if (!OauthProvider::query()->find($params['provider_id'])) { + throw new \InvalidArgumentException("provider_id: {$params['provider_id']} not exists."); + } + do_log("[CREATE_USER], specific provider_id: " . $params['provider_id']); + $user->provider_id = $params['provider_id']; + } $user->save(); fire_event("user_created", $user); return $user; diff --git a/database/migrations/2025_05_02_153802_add_provider_id_to_users_table.php b/database/migrations/2025_05_02_153802_add_provider_id_to_users_table.php new file mode 100644 index 00000000..49f9b391 --- /dev/null +++ b/database/migrations/2025_05_02_153802_add_provider_id_to_users_table.php @@ -0,0 +1,28 @@ +bigInteger("provider_id")->default(0); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn("provider_id"); + }); + } +};