大佬教程收集整理的这篇文章主要介绍了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,请注明来意。