Browse Source

Improve

pull/17409/head
liangshiwei 3 years ago
parent
commit
22c72c51e5
  1. 22
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml
  2. 51
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs

22
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml

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

51
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs

@ -38,6 +38,9 @@ public class RegisterModel : AccountPageModel
public IEnumerable<ExternalProviderModel> ExternalProviders { get; set; } public IEnumerable<ExternalProviderModel> ExternalProviders { get; set; }
public IEnumerable<ExternalProviderModel> VisibleExternalProviders => ExternalProviders.Where(x => !string.IsNullOrWhiteSpace(x.DisplayName)); 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; } protected IAuthenticationSchemeProvider SchemeProvider { get; }
@ -55,13 +58,20 @@ public class RegisterModel : AccountPageModel
public virtual async Task<IActionResult> OnGetAsync() public virtual async Task<IActionResult> OnGetAsync()
{ {
if (!IsExternalLogin) ExternalProviders = await GetExternalProviders();
if (!await CheckSelfRegistrationAsync())
{ {
await CheckSelfRegistrationAsync(); if (!IsExternalLogin && IsExternalLoginOnly)
{
return await OnPostExternalLogin(ExternalLoginScheme);
}
Alerts.Warning(L["SelfRegistrationDisabledMessage"]);
} }
await TrySetEmailAsync(); await TrySetEmailAsync();
ExternalProviders = await GetExternalProviders();
return Page(); return Page();
} }
@ -96,12 +106,12 @@ public class RegisterModel : AccountPageModel
{ {
try try
{ {
if (!IsExternalLogin) ExternalProviders = await GetExternalProviders();
if (!await CheckSelfRegistrationAsync())
{ {
await CheckSelfRegistrationAsync(); throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]);
} }
ExternalProviders = await GetExternalProviders();
if (IsExternalLogin) if (IsExternalLogin)
{ {
@ -172,17 +182,27 @@ public class RegisterModel : AccountPageModel
await SignInManager.SignInAsync(user, isPersistent: true, ExternalLoginAuthSchema); await SignInManager.SignInAsync(user, isPersistent: true, ExternalLoginAuthSchema);
} }
protected virtual async Task CheckSelfRegistrationAsync() protected virtual async Task<bool> CheckSelfRegistrationAsync()
{ {
if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled) || EnableLocalRegister = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin) &&
!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() protected virtual async Task<List<ExternalProviderModel>> GetExternalProviders()
{ {
var schemes = await SchemeProvider.GetAllSchemesAsync(); var schemes = await SchemeProvider.GetAllSchemesAsync();
return schemes return schemes
@ -194,6 +214,15 @@ public class RegisterModel : AccountPageModel
}) })
.ToList(); .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 public class PostInput
{ {

Loading…
Cancel
Save