Don't set password for external login.

pull/4979/head
Halil İbrahim Kalkan 5 years ago
parent 7bfe05ce15
commit 6cac77d262

@ -19,7 +19,6 @@ namespace Volo.Abp.Account.Web.Pages.Account
public class RegisterModel : AccountPageModel
{
protected IAccountAppService AccountAppService { get; }
protected RandomPasswordGenerator RandomPasswordGenerator { get; }
[BindProperty(SupportsGet = true)]
public string ReturnUrl { get; set; }
@ -36,10 +35,9 @@ namespace Volo.Abp.Account.Web.Pages.Account
[BindProperty(SupportsGet = true)]
public string ExternalLoginAuthSchema { get; set; }
public RegisterModel(IAccountAppService accountAppService, RandomPasswordGenerator randomPasswordGenerator)
public RegisterModel(IAccountAppService accountAppService)
{
AccountAppService = accountAppService;
RandomPasswordGenerator = randomPasswordGenerator;
}
public virtual async Task<IActionResult> OnGetAsync()
@ -80,11 +78,6 @@ namespace Volo.Abp.Account.Web.Pages.Account
{
await CheckSelfRegistrationAsync();
var registerDto = new RegisterDto()
{
AppName = "MVC"
};
if (IsExternalLogin)
{
var externalLoginInfo = await SignInManager.GetExternalLoginInfoAsync();
@ -94,34 +87,40 @@ namespace Volo.Abp.Account.Web.Pages.Account
return RedirectToPage("./Login");
}
registerDto.EmailAddress = Input.EmailAddress;
registerDto.UserName = Input.EmailAddress;
registerDto.Password = await RandomPasswordGenerator.CreateAsync();
await RegisterExternalUserAsync(externalLoginInfo, Input.EmailAddress);
}
else
{
ValidateModel();
registerDto.EmailAddress = Input.EmailAddress;
registerDto.Password = Input.Password;
registerDto.UserName = Input.UserName;
await RegisterLocalUserAsync();
}
var userDto = await AccountAppService.RegisterAsync(registerDto);
var user = await UserManager.GetByIdAsync(userDto.Id);
await SignInManager.SignInAsync(user, isPersistent: false);
return Redirect(ReturnUrl ?? "~/"); //TODO: How to ensure safety? IdentityServer requires it however it should be checked somehow!
}
if (IsExternalLogin)
{
await AddToUserLogins(user);
}
protected virtual async Task RegisterLocalUserAsync()
{
ValidateModel();
return Redirect(ReturnUrl ?? "~/"); //TODO: How to ensure safety? IdentityServer requires it however it should be checked somehow!
var userDto = await AccountAppService.RegisterAsync(
new RegisterDto
{
AppName = "MVC",
EmailAddress = Input.EmailAddress,
Password = Input.Password,
UserName = Input.UserName
}
);
var user = await UserManager.GetByIdAsync(userDto.Id);
await SignInManager.SignInAsync(user, isPersistent: true);
}
protected virtual async Task AddToUserLogins(IdentityUser user)
protected virtual async Task RegisterExternalUserAsync(ExternalLoginInfo externalLoginInfo, string emailAddress)
{
var externalLoginInfo = await SignInManager.GetExternalLoginInfoAsync();
var user = new IdentityUser(GuidGenerator.Create(), emailAddress, emailAddress, CurrentTenant.Id);
(await UserManager.CreateAsync(user)).CheckErrors();
(await UserManager.AddDefaultRolesAsync(user)).CheckErrors();
var userLoginAlreadyExists = user.Logins.Any(x =>
x.TenantId == user.TenantId &&
@ -130,13 +129,14 @@ namespace Volo.Abp.Account.Web.Pages.Account
if (!userLoginAlreadyExists)
{
user.AddLogin(new UserLoginInfo(
externalLoginInfo.LoginProvider,
externalLoginInfo.ProviderKey,
externalLoginInfo.ProviderDisplayName
)
);
(await UserManager.AddLoginAsync(user, new UserLoginInfo(
externalLoginInfo.LoginProvider,
externalLoginInfo.ProviderKey,
externalLoginInfo.ProviderDisplayName
))).CheckErrors();
}
await SignInManager.SignInAsync(user, isPersistent: true);
}
protected virtual async Task CheckSelfRegistrationAsync()

Loading…
Cancel
Save