![](/img/trans.png)
[英]ASP.NET MVC 5 - Identity. How to get current ApplicationUser
[英]Custom Implementation of Asp.net IDentity. GetExternalAuthenticationTypes() Returning 0 Providers
我已經實現了自定義Asp.Net身份。 為了使用我自己的數據庫模型,而不是已經內置的數據庫模型。 為此,我自定義實現了以下所有類/接口。
AuthUser : IPrincipal, IUser<string>
ApplicationSignInManager : SignInManager<AuthUserMVC, string>
AuthUserManager : UserManager<AuthUserMVC>
AuthUserStore : IUserStore<AuthUserMVC>
使用It im使用NInject將所需的依賴項注入到我的AccountController中。 AccountController的構造方法簽名為
public AccountController(
UsersRepository usersRepository,
AuthUserManager authUserManager,
AuthUserStore authUserStore,
ApplicationSignInManager signInManager)
{
this.UsersRepository = usersRepository;
this.SignInManager = signInManager;
this.UserManager = authUserManager;
this.UserStore = authUserStore;
}
這是DI的NInject代碼
kernel.Bind<IUserStore<AuthUserMVC>>().To<AuthUserStore>().InRequestScope();
kernel.Bind<IAuthenticationManager>().ToMethod((c)=>HttpContext.Current.GetOwinContext().Authentication);
獲取帳戶/登錄時-開箱即用的常規身份我看不到列出的任何外部登錄提供程序。 那是因為在 _ExternalLoginsListPartial.cshtml
內部
Context.GetOwinContext()
.Authentication
.GetExternalAuthenticationTypes()
正在返回0個提供者。 它不應該做的
我的自定義實施代碼
public class ApplicationSignInManager : SignInManager<AuthUserMVC, string>
{
public ApplicationSignInManager(
AuthUserManager userManager,
IAuthenticationManager authenticationManager)
: base(userManager, authenticationManager)
{
}
public override Task<ClaimsIdentity> CreateUserIdentityAsync(AuthUserMVC user)
{
return Task.FromResult(user.GetIdentity());
}
public static ApplicationSignInManager Create(
IdentityFactoryOptions<ApplicationSignInManager> options,
IOwinContext context)
{
return new ApplicationSignInManager(context.GetUserManager<AuthUserManager>(), context.Authentication);
}
}
public class AuthUserManager : UserManager<AuthUserMVC>
{
public AuthUserManager(IUserStore<AuthUserMVC> store) : base(store)
{
}
public override Task<IdentityResult> AddClaimAsync(string userId, Claim claim)
{
return base.AddClaimAsync(userId, claim);
}
}
我究竟做錯了什么?
如您所知,實現自定義AspNetIdentity提供程序時,您必須做很多事情。 其中之一是實現AuthenticationOptions。 如果您反編譯GetExternalAuthenticationTypes方法的代碼,您將看到它檢查的部分內容是自定義AuthenticationOptions實現具有名為“ Caption”的屬性。 如果不是,那么GetExternalAuthenticationTypes將不會返回它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.