Browse Source

Merge pull request #18088 from abpframework/social-register

Add `username` to social register page.
pull/18092/head
Halil İbrahim Kalkan 3 years ago
committed by GitHub
parent
commit
6f4c1776e3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 43
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs
  2. 2
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml
  3. 2
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs

43
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs

@ -242,14 +242,16 @@ public class LoginModel : AccountPageModel
var user = await UserManager.FindByEmailAsync(email); var user = await UserManager.FindByEmailAsync(email);
if (user == null) if (user == null)
{ {
user = await CreateExternalUserAsync(loginInfo); return RedirectToPage("./Register", new {
IsExternalLogin = true,
ExternalLoginAuthSchema = loginInfo.LoginProvider,
ReturnUrl = returnUrl
});
} }
else
if (await UserManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey) == null)
{ {
if (await UserManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey) == null) CheckIdentityErrors(await UserManager.AddLoginAsync(user, loginInfo));
{
CheckIdentityErrors(await UserManager.AddLoginAsync(user, loginInfo));
}
} }
await SignInManager.SignInAsync(user, false); await SignInManager.SignInAsync(user, false);
@ -264,35 +266,6 @@ public class LoginModel : AccountPageModel
return RedirectSafely(returnUrl, returnUrlHash); return RedirectSafely(returnUrl, returnUrlHash);
} }
protected virtual async Task<IdentityUser> CreateExternalUserAsync(ExternalLoginInfo info)
{
await IdentityOptions.SetAsync();
var emailAddress = info.Principal.FindFirstValue(AbpClaimTypes.Email) ?? info.Principal.FindFirstValue(ClaimTypes.Email);
var userName = await GetUserNameFromEmail(emailAddress);
var user = new IdentityUser(GuidGenerator.Create(), userName, emailAddress, CurrentTenant.Id);
CheckIdentityErrors(await UserManager.CreateAsync(user));
CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress));
CheckIdentityErrors(await UserManager.AddLoginAsync(user, info));
CheckIdentityErrors(await UserManager.AddDefaultRolesAsync(user));
user.Name = info.Principal.FindFirstValue(AbpClaimTypes.Name);
user.Surname = info.Principal.FindFirstValue(AbpClaimTypes.SurName);
var phoneNumber = info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumber);
if (!phoneNumber.IsNullOrWhiteSpace())
{
var phoneNumberConfirmed = string.Equals(info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumberVerified), "true", StringComparison.InvariantCultureIgnoreCase);
user.SetPhoneNumber(phoneNumber, phoneNumberConfirmed);
}
await UserManager.UpdateAsync(user);
return user;
}
protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds() protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds()
{ {
if (!ValidationHelper.IsValidEmailAddress(LoginInput.UserNameOrEmailAddress)) if (!ValidationHelper.IsValidEmailAddress(LoginInput.UserNameOrEmailAddress))

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

@ -12,7 +12,7 @@
<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 || Model.UserNameExtracted) && Model.EnableLocalRegister) @if (Model.EnableLocalRegister || Model.IsExternalLogin)
{ {
<abp-input asp-for="Input.UserName" auto-focus="true"/> <abp-input asp-for="Input.UserName" auto-focus="true"/>
} }

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

@ -37,7 +37,6 @@ public class RegisterModel : AccountPageModel
[BindProperty(SupportsGet = true)] [BindProperty(SupportsGet = true)]
public string ExternalLoginAuthSchema { get; set; } public string ExternalLoginAuthSchema { get; set; }
public bool UserNameExtracted { get; set; }
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 EnableLocalRegister { get; set; }
@ -128,7 +127,6 @@ public class RegisterModel : AccountPageModel
{ {
Input.UserName = await GetUserNameFromEmail(Input.EmailAddress); Input.UserName = await GetUserNameFromEmail(Input.EmailAddress);
} }
UserNameExtracted = true;
await RegisterExternalUserAsync(externalLoginInfo, Input.UserName, Input.EmailAddress); await RegisterExternalUserAsync(externalLoginInfo, Input.UserName, Input.EmailAddress);
} }
else else

Loading…
Cancel
Save