MVC 中的 ASP.NET Identity IUserEmailStore 错误

Posted

技术标签:

【中文标题】MVC 中的 ASP.NET Identity IUserEmailStore 错误【英文标题】:ASP.NET Identity IUserEmailStore error in MVC 【发布时间】:2016-08-20 23:53:35 【问题描述】:

当用户与生成的令牌一起注册时,我正在尝试发送确认电子邮件。令牌没问题。但是在发送电子邮件时,我收到此错误:

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 文件中,我有一个类:

public class ApplicationUserManager : UserManager<ApplicationUser>

        public ApplicationUserManager(IUserStore<ApplicationUser> store)
            : base(store)
        
        

在我的 IdentityConfig.cs 文件中,我还有另一个类:

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);                       
        
    

请帮忙。

【问题讨论】:

【参考方案1】:

在您的模型或代码中的某处,您必须有一个 UserStore 类(除非您使用像 EntityFrameworkIdentity 这样的框架)。

尝试通过搜索UserStore的整个解决方案来找到它,你会发现你必须在它上面实现这个接口。

喜欢:

public class UserStore : IUserStore<UserIdentity>, IUserPasswordStore<UserIdentity>, IUserEmailStore<UserIdentity>

【讨论】:

嗨@Henrique。是的,我使用的是 Microsoft.AspNet.Identity.EntityFramework,所以我知道我不必显式实现 IUserStore。让我更担心的是,我通过在包管理器中安装下载了一个示例项目,如下所示:PM > Install-Package Microsoft.AspNet.Identity.Samples -Pre。该项目运行良好并且能够发送电子邮件,但我的项目无法正常运行。【参考方案2】:

我刚刚发现我安装了Microsoft.AspNet.Identity.EntityFrameworkv1.0.0,但我需要v2.x。我通过包管理器控制台安装了它,输入:

Install-Package Microsoft.AspNet.Identity.EntityFramework -Version 2.2.1

在这个更高版本中,UserStore 实现了 IUserEmailStore,它具有新的电子邮件方法。

【讨论】:

以上是关于MVC 中的 ASP.NET Identity IUserEmailStore 错误的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 5 中的简单角色管理器和授权,无需使用 Identity(CustomRoleProvider)

ASP.NET MVC Identity 添加角色

[ASP.NET MVC] ASP.NET Identity登入技术剖析

Asp.Net Mvc 6 中的公共布尔 isAdmin

ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [关闭]

Microsoft 'Identity Platform' 是不是(轻松)与'(ASP.NET) Identity Framework' - MVC5 & .NET 4.7.2 集成?