我想在多租户应用程序中进行身份验证后重定向 URL。
当用户在登录页面(URL:domain_name.com)上输入凭据并成功验证后,浏览器 URL 必须更改为{tenancy_name}.domain_name.com
我使用电子邮件地址和密码获得了租户名称。现在,我想将该租户名称放入浏览器 URL 中,以便为用户识别它。
这是用户忘记在 URL 中输入租户名称的情况,这意味着用户输入的 URL 如下:domain_name.com
然后在成功验证后,必须将租户名称添加到 URL 中,例如: {tenancy_name}.domain_name.com
并且必须重定向到仪表板页面。
以下是我的登录发布方法:
[HttpPost]
[UnitOfWork]
public virtual async Task<ActionResult> Login(LoginViewModel loginModel, int paymentFlag, string returnUrl = "", string returnUrlHash = "")
{
try
{
var tenant = await _tenantManager.FindByTenancyNameAsync(loginModel.TenancyName);
if (tenant.IsActive == true)
{
if (tenant != null)
{
var payments = await _paymentRepository.GetAll().Where(p => p.TenantId == tenant.Id).FirstOrDefaultAsync();
if (paymentFlag == 0)
{
if (payments == null)
{
return RedirectToAction("Payment", loginModel);
}
}
}
var loginResult = await GetLoginResultAsync(loginModel.UsernameOrEmailAddress, loginModel.Password, loginModel.TenancyName);
var tenantId = loginResult.Tenant == null ? (int?)null : loginResult.Tenant.Id;
using (UnitOfWorkManager.Current.SetTenantId(tenantId))
{
if (loginResult.User.ShouldChangePasswordOnNextLogin)
{
loginResult.User.SetNewPasswordResetCode();
return RedirectToAction("ResetPassword", new
{
TenantId = SimpleStringCipher.Instance.Encrypt(tenantId == null ? null : tenantId.ToString()),
UserId = SimpleStringCipher.Instance.Encrypt(loginResult.User.Id.ToString()),
ResetCode = loginResult.User.PasswordResetCode
});
}
var signInResult = await _signInManager.SignInOrTwoFactorAsync(loginResult, loginModel.RememberMe);
if (signInResult == SignInStatus.RequiresVerification)
{
return RedirectToAction("SendSecurityCode", new
{
returnUrl = returnUrl + (returnUrlHash ?? ""),
rememberMe = loginModel.RememberMe
});
}
Debug.Assert(signInResult == SignInStatus.Success);
await UnitOfWorkManager.Current.SaveChangesAsync();
if (string.IsNullOrWhiteSpace(returnUrl))
{
returnUrl = GetAppHomeUrl();
}
if (!string.IsNullOrWhiteSpace(returnUrlHash))
{
returnUrl = returnUrl + returnUrlHash;
}
}
}
else
{
throw new UserFriendlyException(L("UserEmailIsNotConfirmedAndCanNotLogin"));
}
}
catch (UserFriendlyException ex)
{
return RedirectToAction("Login", new
{
errorMessage = ex.Message
});
}
return Json(new AjaxResponse { TargetUrl = returnUrl });
}