Merge pull request #17409 from abpframework/liangshiwei/account

Improve social media register options Register page
pull/17421/head
maliming 2 years ago committed by GitHub
commit 7b12a41db4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,20 +12,28 @@
<a href="@Url.Page("./Login", new {returnUrl = Model.ReturnUrl, returnUrlHash = Model.ReturnUrlHash})" class="text-decoration-none">@L["Login"]</a>
</strong>
<form method="post" class="mt-4">
@if (!Model.IsExternalLogin)
@if (!Model.IsExternalLogin && Model.EnableLocalRegister)
{
<abp-input asp-for="Input.UserName" auto-focus="true"/>
}
@if(Model.EnableLocalRegister || Model.IsExternalLogin)
{
<abp-input asp-for="Input.EmailAddress"/>
}
<abp-input asp-for="Input.EmailAddress"/>
@if (!Model.IsExternalLogin)
@if (!Model.IsExternalLogin && Model.EnableLocalRegister)
{
<abp-input asp-for="Input.Password"/>
}
<div class="d-grid gap-2">
<abp-button button-type="Primary" type="submit" class="btn-lg mt-4">@L["Register"]</abp-button>
</div>
@if(Model.EnableLocalRegister || Model.IsExternalLogin)
{
<div class="d-grid gap-2">
<abp-button button-type="Primary" type="submit" class="btn-lg mt-4">@L["Register"]</abp-button>
</div>
}
</form>
@if (!Model.IsExternalLogin && Model.VisibleExternalProviders.Any())

@ -38,6 +38,9 @@ public class RegisterModel : AccountPageModel
public IEnumerable<ExternalProviderModel> ExternalProviders { get; set; }
public IEnumerable<ExternalProviderModel> VisibleExternalProviders => ExternalProviders.Where(x => !string.IsNullOrWhiteSpace(x.DisplayName));
public bool EnableLocalRegister { get; set; }
public bool IsExternalLoginOnly => EnableLocalRegister == false && ExternalProviders?.Count() == 1;
public string ExternalLoginScheme => IsExternalLoginOnly ? ExternalProviders?.SingleOrDefault()?.AuthenticationScheme : null;
protected IAuthenticationSchemeProvider SchemeProvider { get; }
@ -55,13 +58,20 @@ public class RegisterModel : AccountPageModel
public virtual async Task<IActionResult> OnGetAsync()
{
if (!IsExternalLogin)
ExternalProviders = await GetExternalProviders();
if (!await CheckSelfRegistrationAsync())
{
await CheckSelfRegistrationAsync();
if (IsExternalLoginOnly)
{
return await OnPostExternalLogin(ExternalLoginScheme);
}
Alerts.Warning(L["SelfRegistrationDisabledMessage"]);
}
await TrySetEmailAsync();
ExternalProviders = await GetExternalProviders();
return Page();
}
@ -96,12 +106,12 @@ public class RegisterModel : AccountPageModel
{
try
{
if (!IsExternalLogin)
ExternalProviders = await GetExternalProviders();
if (!await CheckSelfRegistrationAsync())
{
await CheckSelfRegistrationAsync();
throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]);
}
ExternalProviders = await GetExternalProviders();
if (IsExternalLogin)
{
@ -172,17 +182,27 @@ public class RegisterModel : AccountPageModel
await SignInManager.SignInAsync(user, isPersistent: true, ExternalLoginAuthSchema);
}
protected virtual async Task CheckSelfRegistrationAsync()
protected virtual async Task<bool> CheckSelfRegistrationAsync()
{
if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled) ||
!await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin))
EnableLocalRegister = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin) &&
await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled);
if (IsExternalLogin)
{
return true;
}
if (!EnableLocalRegister)
{
throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]);
return false;
}
return true;
}
protected virtual async Task<List<ExternalProviderModel>> GetExternalProviders()
{
var schemes = await SchemeProvider.GetAllSchemesAsync();
return schemes
@ -194,6 +214,15 @@ public class RegisterModel : AccountPageModel
})
.ToList();
}
protected virtual async Task<IActionResult> OnPostExternalLogin(string provider)
{
var redirectUrl = Url.Page("./Login", pageHandler: "ExternalLoginCallback", values: new { ReturnUrl, ReturnUrlHash });
var properties = SignInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
properties.Items["scheme"] = provider;
return await Task.FromResult(Challenge(properties, provider));
}
public class PostInput
{

Loading…
Cancel
Save