ASP.NET MVC 中的身份 IUserEmailStore 错误
ASP.NET Identity IUserEmailStore error in MVC
我正在尝试在用户与生成的令牌一起注册时发送确认电子邮件。令牌没问题。但是在发送电子邮件时,我收到此错误:
System.NotSupportedException: Store does not implement IUserEmailStore<TUser>.
我在 AccountController 中的 Register 方法中的代码如下所示:导致错误的是 SendEmailAsync() 方法:
if (result.Succeeded)
{
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
ViewBag.Link = callbackUrl;
return View("DisplayEmail");
}
在我的 IdentityConfig.cs 文件中,我有一个 class:
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
}
在我的 IdentityConfig.cs 文件中,我还有另一个 class:
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
// Plug in your email service here to send an email.
SmtpClient client = new SmtpClient();
return client.SendMailAsync(ConfigurationManager.AppSettings["TranscriptEmailAddr"],
message.Destination,
message.Subject,
message.Body);
}
}
请协助。
在您的模型中,或者您代码中的某处,您必须有一个 UserStore class(除非您使用像 EntityFrameworkIdentity
这样的框架)。
尝试通过搜索 UserStore
的整个解决方案来找到它,您会发现必须在其上实现此接口。
喜欢:
public class UserStore : IUserStore<UserIdentity>, IUserPasswordStore<UserIdentity>, IUserEmailStore<UserIdentity>{
}
我刚刚发现我安装了 Microsoft.AspNet.Identity.EntityFramework
v1.0.0
,但我需要 v2.x
。我通过输入以下内容通过程序包管理器控制台安装它:
Install-Package Microsoft.AspNet.Identity.EntityFramework -Version 2.2.1
在这个更高版本中,UserStore
实现了 IUserEmailStore
,它具有新的电子邮件方法。
我正在尝试在用户与生成的令牌一起注册时发送确认电子邮件。令牌没问题。但是在发送电子邮件时,我收到此错误:
System.NotSupportedException: Store does not implement IUserEmailStore<TUser>.
我在 AccountController 中的 Register 方法中的代码如下所示:导致错误的是 SendEmailAsync() 方法:
if (result.Succeeded)
{
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
ViewBag.Link = callbackUrl;
return View("DisplayEmail");
}
在我的 IdentityConfig.cs 文件中,我有一个 class:
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
}
在我的 IdentityConfig.cs 文件中,我还有另一个 class:
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
// Plug in your email service here to send an email.
SmtpClient client = new SmtpClient();
return client.SendMailAsync(ConfigurationManager.AppSettings["TranscriptEmailAddr"],
message.Destination,
message.Subject,
message.Body);
}
}
请协助。
在您的模型中,或者您代码中的某处,您必须有一个 UserStore class(除非您使用像 EntityFrameworkIdentity
这样的框架)。
尝试通过搜索 UserStore
的整个解决方案来找到它,您会发现必须在其上实现此接口。
喜欢:
public class UserStore : IUserStore<UserIdentity>, IUserPasswordStore<UserIdentity>, IUserEmailStore<UserIdentity>{
}
我刚刚发现我安装了 Microsoft.AspNet.Identity.EntityFramework
v1.0.0
,但我需要 v2.x
。我通过输入以下内容通过程序包管理器控制台安装它:
Install-Package Microsoft.AspNet.Identity.EntityFramework -Version 2.2.1
在这个更高版本中,UserStore
实现了 IUserEmailStore
,它具有新的电子邮件方法。