|
|
|
@ -35,19 +35,19 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
|
|
|
|
|
[BindProperty(SupportsGet = true)]
|
|
|
|
|
public string ExternalLoginAuthSchema { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected AbpAccountOptions AccountOptions { get; }
|
|
|
|
|
|
|
|
|
|
public RegisterModel(
|
|
|
|
|
IAccountAppService accountAppService,
|
|
|
|
|
IAccountAppService accountAppService,
|
|
|
|
|
IAuthenticationSchemeProvider schemeProvider,
|
|
|
|
|
IOptions<AbpAccountOptions> accountOptions)
|
|
|
|
|
{
|
|
|
|
@ -66,16 +66,16 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
{
|
|
|
|
|
return await OnPostExternalLogin(ExternalLoginScheme);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Alerts.Warning(L["SelfRegistrationDisabledMessage"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await TrySetEmailAsync();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Page();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task TrySetEmailAsync()
|
|
|
|
|
protected virtual async Task TrySetEmailAsync()
|
|
|
|
|
{
|
|
|
|
|
if (IsExternalLogin)
|
|
|
|
|
{
|
|
|
|
@ -98,7 +98,8 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Input = new PostInput { EmailAddress = emailClaim.Value };
|
|
|
|
|
var userName = await GetUserNameFromEmail(emailClaim.Value);
|
|
|
|
|
Input = new PostInput { UserName = userName, EmailAddress = emailClaim.Value };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -122,7 +123,7 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
return RedirectToPage("./Login");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await RegisterExternalUserAsync(externalLoginInfo, Input.EmailAddress);
|
|
|
|
|
await RegisterExternalUserAsync(externalLoginInfo, Input.UserName, Input.EmailAddress);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -156,11 +157,11 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
await SignInManager.SignInAsync(user, isPersistent: true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual async Task RegisterExternalUserAsync(ExternalLoginInfo externalLoginInfo, string emailAddress)
|
|
|
|
|
protected virtual async Task RegisterExternalUserAsync(ExternalLoginInfo externalLoginInfo, string userName, string emailAddress)
|
|
|
|
|
{
|
|
|
|
|
await IdentityOptions.SetAsync();
|
|
|
|
|
|
|
|
|
|
var user = new IdentityUser(GuidGenerator.Create(), emailAddress, emailAddress, CurrentTenant.Id);
|
|
|
|
|
var user = new IdentityUser(GuidGenerator.Create(), userName, emailAddress, CurrentTenant.Id);
|
|
|
|
|
|
|
|
|
|
(await UserManager.CreateAsync(user)).CheckErrors();
|
|
|
|
|
(await UserManager.AddDefaultRolesAsync(user)).CheckErrors();
|
|
|
|
@ -191,7 +192,7 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!EnableLocalRegister)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
@ -199,10 +200,9 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected virtual async Task<List<ExternalProviderModel>> GetExternalProviders()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
var schemes = await SchemeProvider.GetAllSchemesAsync();
|
|
|
|
|
|
|
|
|
|
return schemes
|
|
|
|
@ -214,7 +214,7 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
})
|
|
|
|
|
.ToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected virtual async Task<IActionResult> OnPostExternalLogin(string provider)
|
|
|
|
|
{
|
|
|
|
|
var redirectUrl = Url.Page("./Login", pageHandler: "ExternalLoginCallback", values: new { ReturnUrl, ReturnUrlHash });
|
|
|
|
@ -241,7 +241,7 @@ public class RegisterModel : AccountPageModel
|
|
|
|
|
[DisableAuditing]
|
|
|
|
|
public string Password { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class ExternalProviderModel
|
|
|
|
|
{
|
|
|
|
|
public string DisplayName { get; set; }
|
|
|
|
|