- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Asp.net 中有一个 Web 应用程序,首先使用 Entity Framework 6 和数据库。用户连接时遇到问题。这是我的代码:
Web.config
<connectionStrings>
<add name="DefaultConnection" connectionString="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_Master;User Id=XXX;Password=XXXX" providerName="System.Data.SqlClient" />
<add name="Cliniciel_WebRV_MasterEntities" connectionString="metadata=res://*/Models.Entities.Cliniciel_WebRV_Master.csdl|res://*/Models.Entities.Cliniciel_WebRV_Master.ssdl|res://*/Models.Entities.Cliniciel_WebRV_Master.msl;provider=System.Data.SqlClient;provider connection string="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_Master;user id=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="Cliniciel_WebRV_Entities" connectionString="metadata=res://*/Models.Entities.Cliniciel_WebRV_Entities.csdl|res://*/Models.Entities.Cliniciel_WebRV_Entities.ssdl|res://*/Models.Entities.Cliniciel_WebRV_Entities.msl;provider=System.Data.SqlClient;provider connection string="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_DEV;user id=XXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="Cliniciel_WebRV_Oauth" connectionString="metadata=res://*/Models.Entities.Cliniciel_WebRV_Oauth.csdl|res://*/Models.Entities.Cliniciel_WebRV_Oauth.ssdl|res://*/Models.Entities.Cliniciel_WebRV_Oauth.msl;provider=System.Data.SqlClient;provider connection string="data source=MyServer\MyDataBase;initial catalog=Cliniciel_WebRV_Master;user id=XXX;password=XXXX;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
这里我使用连接字符串“Cliniciel_WebRV_Oauth”进行身份验证。
我在启动时配置我的 oauthToken
Startup.cs
private void ConfigureOAuthTokenGeneration(IAppBuilder app)
{
//// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
//app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//For Dev enviroment only (on production should be AllowInsecureHttp = false)
#if DEBUG
AllowInsecureHttp = true,
#endif
TokenEndpointPath = new PathString("/oauth/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat("http://localhost:55555/")
};
// OAuth 2.0 Bearer Access Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
}
private void ConfigureOAuthTokenConsumption(IAppBuilder app)
{
var issuer = "http://localhost:55555/";
string audienceId = ConfigurationManager.AppSettings["as:AudienceId"];
byte[] audienceSecret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["as:AudienceSecret"]);
// Api controllers with an [Authorize] attribute will be validated with JWT
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audienceId },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, audienceSecret)
}
});
}
ApplicationDBContext.cs
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.SessionState;
using WebRV.Models.Entities;
namespace WebRV.Infrastructure
{
public class ApplicationDbContext : IdentityDbContext<ApplicationUser> //DOIT CREER APPLICATION USER.
{
public ApplicationDbContext()
: base("Cliniciel_WebRV_Oauth", throwIfV1Schema: false)
{
Configuration.ProxyCreationEnabled = false;
Configuration.LazyLoadingEnabled = false;
}
[WebMethod(EnableSession = true)]
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
}
CustomOAuthProvider.cs
using System;
using System.Linq;
using WebRV.Infrastructure;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.OAuth;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity.Owin;
using System.Web.Mvc;
using WebRV.Models.Entities;
using System.Net;
using System.Web.Http;
namespace WebRV.Providers
{
public class CustomOAuthProvider : OAuthAuthorizationServerProvider
{
[ValidateAntiForgeryToken]
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
return Task.FromResult<object>(null);
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var allowedOrigin = "*";
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
}
else
{
//if (!user.EmailConfirmed)
//{
// context.SetError("invalid_grant", "User did not confirm email.");
// return;
//}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, "JWT");
var ticket = new AuthenticationTicket(oAuthIdentity, null);
context.Validated(ticket);
}
}
}
}
这是我得到的错误:
The ApplicationUser entity type is not part of the model for the current context.
这是痕迹:
Ligne 32 : var userManager = context.OwinContext.GetUserManager(); Ligne 33 : Ligne 34 : ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password); Ligne 35 : Ligne 36 : if (user == null)
Fichier source : c:\Users\aboucher\Desktop\WebRV-2016-05-12 - Copie\Cliniciel_WebRV\WebRV\WebRV\Providers\CustomOAuthProvider.cs
Ligne : 34Trace de la pile:
[InvalidOperationException: Le type d'entité ApplicationUser ne fait pas partie du modèle pour le contexte actuel.]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType) +4479799
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +37
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +53<br/>
1.get_InternalContext() +16 System.Data.Entity.Infrastructure.DbQuery
System.Data.Entity.Internal.Linq.InternalSet1.System.Linq.IQueryable.get_Provider()
1 source, Expression
+39 System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate, CancellationToken cancellationToken)
1 source, Expression
+154 System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(IQueryable1 predicate) +163<br/>
1.GetResult() +28 Microsoft.AspNet.Identity.CultureAwaiter
Microsoft.AspNet.Identity.EntityFramework.<GetUserAggregateAsync>d__6c.MoveNext()
+807 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92<br/>
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter1.GetResult() +123 Microsoft.AspNet.Identity.<FindAsync>d__12.MoveNext() +601<br/>
1.GetResult() +28 WebRV.Providers.d__0.MoveNext() in c:\Users\aboucher\Desktop\WebRV-2016-05-12 - Copie\Cliniciel_WebRV\WebRV\WebRV\Providers\CustomOAuthProvider.cs:34 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92<br/>
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Security.OAuth.d__3f.MoveNext() +863 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()
1.GetResult() +28 Microsoft.Owin.Security.Infrastructure.d__0.MoveNext() +664 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
+28 Microsoft.Owin.Security.OAuth.<InvokeTokenEndpointAsync>d__22.MoveNext()
+2336 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92<br/>
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
+26 Microsoft.Owin.Security.OAuth.<InvokeAsync>d__0.MoveNext() +1733 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) +92<br/>
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) +58 System.Runtime.CompilerServices.TaskAwaiter
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.AspNet.Identity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.AspNet.Identity.Owin.d__0.MoveNext() +641 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__5.MoveNext() +287 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +26 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.d__2.MoveNext() +272 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +26 Microsoft.Owin.Host.SystemWeb.Infrastructure.ErrorState.Rethrow() +33 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar) +150
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar) +42
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +380 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
最佳答案
你的 ApplicationUserManager 方法在哪里
你需要像这样通过传递 DbContext 来配置 Application UserManager
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
};
// Configure user lockout defaults
manager.UserLockoutEnabledByDefault = true;
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
// Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
// You can write your own provider and plug it in here.
manager.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ApplicationUser>
{
MessageFormat = "Your security code is {0}"
});
manager.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ApplicationUser>
{
Subject = "Security Code",
BodyFormat = "Your security code is {0}"
});
manager.EmailService = new EmailService();
manager.SmsService = new SmsService();
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
}
return manager;
}
}
最重要的是写这一行(Create方法中的第一行)
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<EducationContext>()));
关于c# - 实体类型 ApplicationUser 不是当前上下文模型的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42005959/
我在 Visual Studio 中创建了一个新的 ASP.NET MVC 项目,模板创建了一个 IdentityConfig.cs 文件,如下所示 using System; using Syste
我有一个从同事那里得到的 ASP MVC 项目,它有 2 个上下文。一个来自登录所需的模板,另一个是自制的。所以我想把两者结合起来,但我总是收到这个错误: ApplicationUser is not
我正在使用 ASP.NET Identity 2.0。目前我想通过表 UserDetails 扩展 ApplicationUser(将 AspNetUsers 重命名为 Users),例如 First
是否可以检查 ApplicationUser 是否有声明? 我知道可以检查 ApplicationUser 是否在某个角色中 userManager.IsInRoleAsync(application
在我的 MVC 应用程序中,我使用 TPT inheritance 创建了基本 ASP Identity ApplicationUser 类的两个子类。 ,并希望向对象添加一些声明,以便我可以轻松地在
我正在尝试为我的模拟 ApplicationUserManager 提供一个 ApplicationUser。当我尝试添加角色时,我注意到 Roles 是一个只读属性。不确定在我的测试中实现的最佳方式
我创建了一个名为 Person 的自定义类来存储姓名、地址等。这个类/模型是从其他模型交叉引用的,包括 ApplicationUser: public class ApplicationUser :
我有以下实体: public class ApplicationUser : IdentityUser { ... public int? StudentId { get; set;
我在 Asp.net 中有一个 Web 应用程序,首先使用 Entity Framework 6 和数据库。用户连接时遇到问题。这是我的代码: Web.config
我正在从 Identity 1.0.0 迁移到 Identity 2.0.1 之后 article 并且生成的迁移代码与新的 IdentityUser 无关。它不会添加新列。 所以我做了一个新项目并再
我正在尝试掌握 ASP.NET MVC 5 中引入的新成员资格系统,但我遇到了一个小问题,我很确定您能帮我解决这个问题。 我要离开 this tutorial并为 ApplicationUser 引入
应该在什么基础上决定使用 IdentityDbContext与 IdentityDbContext在 ASP.NET MVC5 应用程序中? 使用IdentityDbContext给我们带来什么好处而
我希望能够使用 WebAPI 2 公开用户列表。但是,由于我在 MVC5 中使用新的 Asp.Net 身份验证框架,我似乎找不到一种方法来仅将特定字段标记为 数据成员。 这是我所拥有的: [DataC
我有这门课 public class ApplicationUser : IdentityUser { public string Email { get; set; } public s
Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.IE
我正在谷歌搜索以在 ASP.NET Identity 3.0 的 Controller 中获取应用程序用户,但我只找到 5 及以下的结果。 我正在尝试获取 ApplicationUser 属性,但我根
我问过有关旧 MVC 版本和成员资格的类似问题,但这些解决方案不适用于 Idendity 和 MVC 6。 我想在 _LoginPartial.cshtml 文件中显示用户的名字。因此,我想访问当前登
我首先使用实体框架代码对用户创建小的 CRUD 操作。现在我需要使用存储过程删除用户,所以我找到许多链接获取如何在 EF 中使用存储过程的解决方案。所以我写这段代码那个。但是我在类中编写此代码和方
我将这个问题作为文档发布,因为我花了很多时间才找到这个简单的问题。我正在使用 VS15 生成的原始 MVC 项目并尝试对其进行修改。 错误:[InvalidOperationException:实体类
我正在使用 EF6/.Net 4.5.1 在 Web 窗体的用户控件中检索 ListView 的数据。我修改了 ApplicationUser 以包含一个使用 FK 属性的导航属性 [1:1],该属性
我是一名优秀的程序员,十分优秀!