程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了NotSupportedException: Store 没有实现 IUserLoginStore<TUser>大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决NotSupportedException: Store 没有实现 IUserLoginStore<TUser>?

开发过程中遇到NotSupportedException: Store 没有实现 IUserLoginStore<TUser>的问题如何解决?下面主要结合日常开发的经验,给出你关于NotSupportedException: Store 没有实现 IUserLoginStore<TUser>的解决方法建议,希望对你解决NotSupportedException: Store 没有实现 IUserLoginStore<TUser>有所启发或帮助;

我遇到了问题,我不知道如何解决。我已经使用 Facebook 和 Google 创建了 1 个登录功能。我获得了我的帐户信息,但是当需要回拨 ExternalLoginCallBACk -> _signInManager.ExternalLoginSignInAsync 时,我收到以下错误消息。我不知道为什么。期待所有的帮助者。非常感谢!

这是我的错误:

NotSupportedException: Store does not implement IUserLoginStore<TUser>.
Microsoft.AspNetCore.IDentity.UseRMANager<TUser>.GetLoginStore()
Microsoft.AspNetCore.IDentity.UseRMANager<TUser>.FindByLoginAsync(String loginProvIDer,String provIDerKey)
Microsoft.AspNetCore.IDentity.SignInManager<TUser>.ExternalLoginSignInAsync(String loginProvIDer,String provIDerKey,bool isPersistent,bool bypasstwoFactor)
ShopAuth.Core.Web.ClIEnt.Controllers.AccountController.ExternalLoginCallBACk(String returnUrl,String remoteError) in AccountController.cs
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvIDer,info.ProvIDerKey,isPersistent: false,bypasstwoFactor: truE);
Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper,ObjectMethodExecutor executor,object controller,object[] arguments)

这是我的代码:

UserStore.cs

public class UserStore : IUserStore<AppUser>,IUserEmailStore<AppUser>,IUserPhonenumberStore<AppUser>,IUserTwoFactorStore<AppUser>,IUserpasswordStore<AppUser>,IUserRoleStore<AppUser>,IUserLockoutStore<AppUser>
{
    private Readonly String _connectionString;

    public UserStore(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("DbConnectionString");
    }

    // Some impl code here...
}

AccountController.cs

public AccountController(UseRMANager<AppUser> useRMANager,IConfiguration configuration,SignInManager<AppUser> signInManager,IEmailSender emailSender)
{
    _signInManager = signInManager;
    _useRMANager = useRMANager;
    _configuration = configuration;
    _connectionString = configuration.GetConnectionString("DbConnectionString");
    _emailSender = emailSender;
}

[httpPost]
[AllowAnonymous]
[ValIDateAntiForgeryToken]
public IActionResult ExternalLogin(String provIDer,String returnUrl = null)
{
    // request a redirect to the external login provIDer.
    var redirectUrl = Url.Action(nameof(ExternalLoginCallBACk),"Account",new { returnUrl });
    var propertIEs = _signInManager.ConfigureExternalAuthenticationPropertIEs(provIDer,redirectUrl);
    return ChALLENge(propertIEs,provIDer);
}

[httpGet]
[AllowAnonymous]
public async Task<IActionResult> ExternalLoginCallBACk(String returnUrl = null,String remoteError = null)
{
    if (remoteError != null)
    {
        return RedirectToAction(nameof(Login));
    }
    var info = await _signInManager.GetExternalLoginInfoAsync();
    if (info == null)
    {
        return RedirectToAction(nameof(Login));
    }

    // Sign in the user with this external login provIDer if the user already has a login.
    var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvIDer,bypasstwoFactor: truE);
    if (result.Succeeded)
    {
        return RedirectTolocal(returnUrl);
    }
    if (result.IsLockedOut)
    {
        return RedirectToAction(nameof(logout));
    }
    else
    {
        // If the user does not have an account,then ask the user to create an account.
        VIEwData["ReturnUrl"] = returnUrl;
        VIEwData["LoginProvIDer"] = info.LoginProvIDer;
        var email = info.Principal.FindFirstValue(ClaimTypes.Email);
        return VIEw("ExternalLogin",new ExternalLoginviewmodel());
    }
}

[httpPost]
[AllowAnonymous]
[ValIDateAntiForgeryToken]
public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginviewmodel model,String returnUrl = null)
{
    if (ModelState.IsValID)
    {
        // Get the information about the user from the external login provIDer
        var info = await _signInManager.GetExternalLoginInfoAsync();
        if (info == null)
        {
            throw new ApplicationException("Error loading external login information during confirmation.");
        }
        var email = info.Principal.FindFirstValue(ClaimTypes.Email);

        var user = new AppUser
        {
            Username = email,Email = email,Fullname = model.Fullname,};
        var result = await _useRMANager.CreateAsync(user);
        if (result.Succeeded)
        {
            result = await _useRMANager.AddLoginAsync(user,info);
            if (result.Succeeded)
            {
                await _signInManager.SignInAsync(user,isPersistent: falsE);
                return RedirectTolocal(returnUrl);
            }
        }
        AddErrors(result);
    }

    VIEwData["ReturnUrl"] = returnUrl;
    return VIEw(nameof(ExternalLogin),model);
}

解决方法

您需要在 IUserLoginStore<TUser> 中实现 UserStore。 “登录”是存储外部登录信息的方式,例如 Facebook 或 Google 登录信息,而不是用户名或密码。您需要添加该功能,以便用户可以使用外部登录。

大佬总结

以上是大佬教程为你收集整理的NotSupportedException: Store 没有实现 IUserLoginStore<TUser>全部内容,希望文章能够帮你解决NotSupportedException: Store 没有实现 IUserLoginStore<TUser>所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: