我正在将项目https://github.com/attilah/AngularJSAuthentication迁移到使用mongodb驱动程序第2章,我在这里的最后一步:
namespace AngularJSAuthentication.API
{
using AspNet.Identity.MongoDB;
using Entities;
using MongoDB.Driver;
public class ApplicationIdentityContext : IdentityContext
{
public ApplicationIdentityContext(IMongoContext mongoContext)
: this(mongoContext.Users, mongoContext.Roles)
{
}
public ApplicationIdentityContext(IMongoCollection<User> users, IMongoCollection<Role> roles)
: base(users, roles)
{
}
}
}
然后我收到此错误
Severity Code Description Project File Line Suppression State
Error CS0246 The type or namespace name 'IdentityContext' could not be found (are you missing a using directive or an assembly reference?) AngularJSAuthentication.API D:\Projects\AngularJSAuthentication-master\AngularJSAuthentication.API\ApplicationIdentityContext.cs
这是我目前的源代码
https://github.com/skanel/Angular2-WebApi2-Mongodb2-Authentication
已更新
@Swagata Prateek,感谢您的代码,但是当我运行它时,我停止工作,直接指向startup.cs中的这段代码
private void ConfigureOAuth(IAppBuilder app, IContainer container)
{
var OAuthServerOptions = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = container.Resolve<IOAuthAuthorizationServerProvider>(),
RefreshTokenProvider = container.Resolve<IAuthenticationTokenProvider>()
};
错误
“Autofac.Core.DependencyResolutionException”类型的例外 发生在Autofac.dll但未在用户代码中处理
其他信息:激活a期间发生错误 特别注册。有关详细信息,请参阅内部异常 注册:Activator = SimpleAuthorizationServerProvider (ReflectionActivator),服务= [Microsoft.Owin.Security.OAuth.IOAuthAuthorizationServerProvider] Lifetime = Autofac.Core.Lifetime.RootScopeLifetime,Sharing = Shared, 所有权= OwnedByLifetimeScope
答案 0 :(得分:1)
我个人使用与Mongodb相同的Asp.net Identity实现示例,以及您错过该类的原因是因为示例很旧并且依赖于mongodb的Identity扩展名为{ {3}}它已经发展到更新版本。
我无法在此处详细说明我如何使用它,但我确实可以指向我的开源项目here,我已经从您提到的示例中学到了这一点。我希望它可以解决你使用Mongodb实现Asp.net身份的问题。
如果你想拥有Attila Hajdrik在git repo中写的完全相同的解决方案,请确保你拥有完全相同的包版本AspNet.Identity.MongoDB定义here。因为库本身现在已经升级了,我认为你要么更新所有的nuget包,要么根据你的需要重新创建github repo中写的整个解决方案。在这两种情况下,您可能最终得到一个您不想使用的AspNet.Identity.MongoDB版本。这个应该是您需要的最短和最简单的解决方案。
现在从我的github repo上面提到我的解决方案。我使用了自己的IAccountContext
,并使用UserManager<User>
作为我的基础AccountManager,使用UserStore<User>
作为管理员的基础商店。这里User
类是Im使用的Identity类,它派生自IdentityUser
。
从技术上讲,您可以轻松地构建自己的上下文,而不是 真的要完全依赖给定的例子。
我的示例AccountContext将是:
public class AccountContext : IAccountContext
{
private readonly IDbContext dbContext;
private readonly AccountManager accountManager;
public AccountContext(
IDbContext dbContext,
AccountManager accoutnManager)
{
this.dbContext = dbContext;
this.accountManager = accoutnManager;
}
// Your own stuff here
}
此处,AccountManager
是一个UserManager<T>
衍生产品,它的构造函数需要IUserStore<User>
。它实际上为您提供了如何设计Identity层的更多自由。 :)
希望这会有所帮助。
答案 1 :(得分:0)
很多这个软件包版本都很旧,可能是兼容性问题。如果没有任何内容阻止您更新,请将软件包更新到最新版本。
当您进行更新时,只是在AspNet.Identity.MongoDb包/库中不再存在IdentityContext的FYI。请参阅Github中的源代码:https://github.com/g0t4/aspnet-identity-mongo