oauth provider email_claim required

This commit is contained in:
xiaomlove
2025-05-02 14:22:35 +07:00
parent 7b4a0d2fc5
commit cd6ac587c2
6 changed files with 20 additions and 13 deletions
@@ -41,8 +41,8 @@ class ClientResource extends Resource
{ {
return $form return $form
->schema([ ->schema([
Forms\Components\TextInput::make('name')->label(__('label.name')), Forms\Components\TextInput::make('name')->label(__('label.name'))->required(),
Forms\Components\TextInput::make('redirect')->label(__('oauth.redirect')), Forms\Components\TextInput::make('redirect')->label(__('oauth.redirect'))->required(),
Forms\Components\Radio::make('skips_authorization') Forms\Components\Radio::make('skips_authorization')
->options(self::getYesNoOptions()) ->options(self::getYesNoOptions())
->inline() ->inline()
@@ -68,12 +68,14 @@ class ProviderResource extends Resource
->label(__('oauth.id_claim')) ->label(__('oauth.id_claim'))
->required() ->required()
, ,
Forms\Components\TextInput::make('email_claim')
->label(__('oauth.email_claim'))
->required()
,
Forms\Components\TextInput::make('username_claim') Forms\Components\TextInput::make('username_claim')
->label(__('oauth.username_claim')) ->label(__('oauth.username_claim'))
, ,
Forms\Components\TextInput::make('email_claim')
->label(__('oauth.email_claim'))
,
Forms\Components\TextInput::make('level_claim') Forms\Components\TextInput::make('level_claim')
->label(__('oauth.level_claim')) ->label(__('oauth.level_claim'))
, ,
+10 -8
View File
@@ -93,8 +93,16 @@ class OauthController extends Controller
if (empty($providerUserId)) { if (empty($providerUserId)) {
throw new NexusException(nexus_trans('oauth.get_provider_user_id_error', ['id_claim' => $provider->id_claim])); 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); $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); $providerLevel = data_get($userInfo, $provider->level_claim);
$homeUrl = getSchemeAndHttpHost() . "/index.php"; $homeUrl = getSchemeAndHttpHost() . "/index.php";
$socialAccount = SocialAccount::query() $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])); 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); $newUser = $this->createUser($providerUsername, $providerEmail);
$socialAccountData = [ $socialAccountData = [
'user_id' => $newUser->id, 'user_id' => $newUser->id,
+1
View File
@@ -26,4 +26,5 @@ return [
'get_provider_level_error' => 'Unable to get user level via field :level_claim', '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_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', 'provider_email_already_exists' => 'Email: :email is already in use',
'get_provider_email_error' => 'Unable to get user email via field :email_claim',
]; ];
+1
View File
@@ -26,4 +26,5 @@ return [
'get_provider_level_error' => '无法通过字段 :level_claim 获取用户等级', 'get_provider_level_error' => '无法通过字段 :level_claim 获取用户等级',
'provider_level_not_allowed' => '仅允许 :level_limit 或以上等级的用户登录', 'provider_level_not_allowed' => '仅允许 :level_limit 或以上等级的用户登录',
'provider_email_already_exists' => '邮箱::email 已经被使用', 'provider_email_already_exists' => '邮箱::email 已经被使用',
'get_provider_email_error' => '无法通过字段 :email_claim 获取用户邮箱',
]; ];
+1
View File
@@ -26,4 +26,5 @@ return [
'get_provider_level_error' => '無法通過字段 :level_claim 獲取用戶等級', 'get_provider_level_error' => '無法通過字段 :level_claim 獲取用戶等級',
'provider_level_not_allowed' => '僅允許 :level_limit 或以上等級的用戶登錄', 'provider_level_not_allowed' => '僅允許 :level_limit 或以上等級的用戶登錄',
'provider_email_already_exists' => '郵箱::email 已經被使用', 'provider_email_already_exists' => '郵箱::email 已經被使用',
'get_provider_email_error' => '無法通過字段 :email_claim 獲取用戶郵箱',
]; ];