diff --git a/app/Filament/Resources/Oauth/ClientResource.php b/app/Filament/Resources/Oauth/ClientResource.php index 3b369167..7ea20ad7 100644 --- a/app/Filament/Resources/Oauth/ClientResource.php +++ b/app/Filament/Resources/Oauth/ClientResource.php @@ -41,8 +41,8 @@ class ClientResource extends Resource { return $form ->schema([ - Forms\Components\TextInput::make('name')->label(__('label.name')), - Forms\Components\TextInput::make('redirect')->label(__('oauth.redirect')), + Forms\Components\TextInput::make('name')->label(__('label.name'))->required(), + Forms\Components\TextInput::make('redirect')->label(__('oauth.redirect'))->required(), Forms\Components\Radio::make('skips_authorization') ->options(self::getYesNoOptions()) ->inline() diff --git a/app/Filament/Resources/Oauth/ProviderResource.php b/app/Filament/Resources/Oauth/ProviderResource.php index cc0df175..957a3387 100644 --- a/app/Filament/Resources/Oauth/ProviderResource.php +++ b/app/Filament/Resources/Oauth/ProviderResource.php @@ -68,12 +68,14 @@ class ProviderResource extends Resource ->label(__('oauth.id_claim')) ->required() , + Forms\Components\TextInput::make('email_claim') + ->label(__('oauth.email_claim')) + ->required() + , Forms\Components\TextInput::make('username_claim') ->label(__('oauth.username_claim')) , - Forms\Components\TextInput::make('email_claim') - ->label(__('oauth.email_claim')) - , + Forms\Components\TextInput::make('level_claim') ->label(__('oauth.level_claim')) , diff --git a/app/Http/Controllers/OauthController.php b/app/Http/Controllers/OauthController.php index c084b3ab..a9d40af4 100644 --- a/app/Http/Controllers/OauthController.php +++ b/app/Http/Controllers/OauthController.php @@ -93,8 +93,16 @@ class OauthController extends Controller if (empty($providerUserId)) { throw new NexusException(nexus_trans('oauth.get_provider_user_id_error', ['id_claim' => $provider->id_claim])); } - $providerUsername = data_get($userInfo, $provider->username_claim); $providerEmail = data_get($userInfo, $provider->email_claim); + if (empty($providerEmail)) { + throw new NexusException(nexus_trans('oauth.get_provider_email_error', ['email_claim' => $provider->email_claim])); + } + $sameEmailUser = User::query()->where('email', $providerEmail)->first(); + if ($sameEmailUser) { + //login to bind is better, not implement this time + throw new NexusException(nexus_trans('oauth.provider_email_already_exists', ['email' => $providerEmail])); + } + $providerUsername = data_get($userInfo, $provider->username_claim); $providerLevel = data_get($userInfo, $provider->level_claim); $homeUrl = getSchemeAndHttpHost() . "/index.php"; $socialAccount = SocialAccount::query() @@ -116,13 +124,7 @@ class OauthController extends Controller throw new NexusException(nexus_trans("oauth.provider_level_not_allowed", ['level_limit' => $provider->level_limit])); } } - if ($providerEmail) { - $sameEmailUser = User::query()->where('email', $providerEmail)->first(); - if ($sameEmailUser) { - //login to bind is better, not implement this time - throw new NexusException(nexus_trans('oauth.provider_email_already_exists', ['email' => $providerEmail])); - } - } + $newUser = $this->createUser($providerUsername, $providerEmail); $socialAccountData = [ 'user_id' => $newUser->id, diff --git a/resources/lang/en/oauth.php b/resources/lang/en/oauth.php index 42824ff0..ae97701f 100644 --- a/resources/lang/en/oauth.php +++ b/resources/lang/en/oauth.php @@ -26,4 +26,5 @@ return [ 'get_provider_level_error' => 'Unable to get user level via field :level_claim', 'provider_level_not_ allowed' => 'Only users with level :level_limit or above are allowed to log in', 'provider_email_already_exists' => 'Email: :email is already in use', + 'get_provider_email_error' => 'Unable to get user email via field :email_claim', ]; diff --git a/resources/lang/zh_CN/oauth.php b/resources/lang/zh_CN/oauth.php index fa4c6231..adfc4cee 100644 --- a/resources/lang/zh_CN/oauth.php +++ b/resources/lang/zh_CN/oauth.php @@ -26,4 +26,5 @@ return [ 'get_provider_level_error' => '无法通过字段 :level_claim 获取用户等级', 'provider_level_not_allowed' => '仅允许 :level_limit 或以上等级的用户登录', 'provider_email_already_exists' => '邮箱::email 已经被使用', + 'get_provider_email_error' => '无法通过字段 :email_claim 获取用户邮箱', ]; diff --git a/resources/lang/zh_TW/oauth.php b/resources/lang/zh_TW/oauth.php index 048919d7..6235c982 100644 --- a/resources/lang/zh_TW/oauth.php +++ b/resources/lang/zh_TW/oauth.php @@ -26,4 +26,5 @@ return [ 'get_provider_level_error' => '無法通過字段 :level_claim 獲取用戶等級', 'provider_level_not_allowed' => '僅允許 :level_limit 或以上等級的用戶登錄', 'provider_email_already_exists' => '郵箱::email 已經被使用', + 'get_provider_email_error' => '無法通過字段 :email_claim 獲取用戶郵箱', ];