这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

105 lines
3.6 KiB

using AuthServer.Host.Emailing.Templates;
using Microsoft.Extensions.Localization;
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Web;
using Volo.Abp.Account.Emailing;
using Volo.Abp.Account.Localization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Emailing;
using Volo.Abp.Identity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.TextTemplating;
using Volo.Abp.UI.Navigation.Urls;
namespace AuthServer.Host.Emailing
{
[Dependency(ReplaceServices = true)]
[ExposeServices(
typeof(IAccountEmailer),
typeof(AccountEmailer),
typeof(IAccountEmailVerifySender),
typeof(AccountEmailVerifySender))]
public class AccountEmailVerifySender : AccountEmailer, IAccountEmailVerifySender, ITransientDependency
{
public AccountEmailVerifySender(
IEmailSender emailSender,
ITemplateRenderer templateRenderer,
IStringLocalizer<AccountResource> stringLocalizer,
IAppUrlProvider appUrlProvider,
ICurrentTenant currentTenant)
: base(emailSender, templateRenderer, stringLocalizer, appUrlProvider, currentTenant)
{
}
public virtual async Task SendMailLoginVerifyLinkAsync(
IdentityUser user,
string code,
string appName,
string provider,
bool rememberMe = false,
string returnUrl = null,
string returnUrlHash = null)
{
Debug.Assert(CurrentTenant.Id == user.TenantId, "This method can only work for current tenant!");
// TODO: 需要生成快捷链接
//var url = await AppUrlProvider.GetUrlAsync(appName, AccountUrlNames.MailLoginVerify);
//var link = $"{url}?provider={provider}&rememberMe={rememberMe}&resetToken={UrlEncoder.Default.Encode(code)}";
//if (!returnUrl.IsNullOrEmpty())
//{
// link += "&returnUrl=" + NormalizeReturnUrl(returnUrl);
//}
//if (!returnUrlHash.IsNullOrEmpty())
//{
// link += "&returnUrlHash=" + returnUrlHash;
//}
var emailContent = await TemplateRenderer.RenderAsync(
AccountEmailTemplates.MailSecurityVerifyLink,
new { code = code, user = user.UserName }
);
await EmailSender.SendAsync(
user.Email,
StringLocalizer["MailSecurityVerify"],
emailContent
);
}
protected override string NormalizeReturnUrl(string returnUrl)
{
if (returnUrl.IsNullOrEmpty())
{
return returnUrl;
}
//Handling openid connect login
if (returnUrl.StartsWith("/connect/authorize/callback", StringComparison.OrdinalIgnoreCase))
{
if (returnUrl.Contains("?"))
{
var queryPart = returnUrl.Split('?')[1];
var queryParameters = queryPart.Split('&');
foreach (var queryParameter in queryParameters)
{
if (queryParameter.Contains("="))
{
var queryParam = queryParameter.Split('=');
if (queryParam[0] == "redirect_uri")
{
return HttpUtility.UrlDecode(queryParam[1]);
}
}
}
}
}
return returnUrl;
}
}
}