|
|
|
@ -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()
|
|
|
|
|