是否可以为"系统"ASP.NET Identity v1错误消息提供本地化字符串,例如" 名称XYZ已被占用 "或" 用户名XYZ无效,只能包含字母或数字 "?
如何在ASP.Net MVC5 Identity 2中更改密码验证?
谢谢
要在MVC5中获取当前登录的用户,我们所要做的就是:
using Microsoft.AspNet.Identity;
[Authorize]
public IHttpActionResult DoSomething() {
string currentUserId = User.Identity.GetUserId();
}
Run Code Online (Sandbox Code Playgroud)
现在,使用ASP.NET Core我认为这应该可行,但它会引发错误.
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Http;
private readonly UserManager<ApplicationUser> _userManager;
[HttpPost]
[Authorize]
public async Task<IActionResult> StartSession() {
var curUser = await _userManager.GetUserAsync(HttpContext.User);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑: Gerardo的回应是正常的,但要获得用户的实际"Id",这似乎工作:
ClaimsPrincipal currentUser = this.User;
var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
Run Code Online (Sandbox Code Playgroud) 我想将IdentityContext与mydbcontext集成,但我正在接受此错误
在模型生成期间检测到一个或多个验证错误:
Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键.Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole :: EntityType'IdentityUserRole'没有定义键.定义此EntityType的键.IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'基于没有定义键的类型'IdentityUserLogin'.IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于类型'IdentityUserRole',没有定义键.
我怎么解决这个问题?
码:
public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser>
{
static ivdbDb156978Context()
{
Database.SetInitializer<ivdbDb156978Context>(null);
}
public ivdbDb156978Context()
: base("Name=ivdbContext")
{
}
public DbSet<Car> Cars { get; set; }
Run Code Online (Sandbox Code Playgroud)
应用用户
public class ApplicationUser : IdentityUser
{
}
Run Code Online (Sandbox Code Playgroud) 我正在查看新ASP.NET Identity类的接口以及它使用Entity Framework Code First创建的数据库.我正在使用Visual Studio 2013 RC.
乍一看,数据库模式看起来相当正常:

但是所有钥匙都是NVARCHAR(128)
而出于一些疯狂的原因AspNetUserSecrets.Id,PK似乎可以指向AspNetUsers表中的多个记录.这是否意味着多AspNetUsers个人必须共享相同的密码?
当我看到你要强制实现的接口时,这些都是字符串......
public class User : IUser
{
public string Id { get; set; }
public string UserName { get; set; }
}
public class UserSecret : IUserSecret
{
public string UserName { get; set; }
public string Secret { get; set; }
}
public class UserRole : IUserRole
{
public string UserId { get; set; }
public string RoleId { get; set; } …Run Code Online (Sandbox Code Playgroud) 我试图找到一个文档或示例,说明如何使用ASP.NET标识在MVC 5中向用户标识添加自定义声明.该示例应显示在OWIN安全管道中插入声明的位置以及如何使用表单身份验证将它们保存在cookie中.
我在一个单独的Data Accass Layer类库项目中有一个MyDbContext.我有一个带有默认IdentityDbContext的ASP.NET MVC 5项目.这两个上下文使用相同的数据库,我想将AspNetUsers表用于我的表的外键.所以我想合并两个Context,我也想使用ASP.NET Identity.
我怎样才能做到这一点?
请指教,
合并后这是我的上下文:
public class CrmContext : IdentityDbContext<CrmContext.ApplicationUser> //DbContext
{
public class ApplicationUser : IdentityUser
{
public Int16 Area { get; set; }
public bool Holiday { get; set; }
public bool CanBePublic { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public CrmContext()
: base("DefaultConnection")
{
}
public DbSet<Case> Case { get; set; }
public DbSet<CaseLog> CaseLog { get; set; }
public DbSet<Comment> …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用ASP.NET身份时出错.
不支持每种类型的多个对象集.对象集"Identity Users"和"Users"都可以包含"Recommendation Platform.Models.ApplicationUser"类型的实例.
我在StackOverflow中看到了一些关于这个错误的问题.全部表示两个DbSet相同类型的对象.但在我看来DbContext有不一样的类型DbSets.FindAsync()在登录期间抛出方法的异常.
if (ModelState.IsValid)
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null && user.IsConfirmed)
{
Run Code Online (Sandbox Code Playgroud)
问题是我没有两个DbSets相同的类型.我的上下文看起来像这样:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class RecContext : DbContext
{
public RecContext()
: base("RecConnection")
{
Database.SetInitializer<RecContext>(new DropCreateDatabaseIfModelChanges<RecContext>());
}
public DbSet<Recommendation> Recommendations { get; set; }
public DbSet<Geolocation> Geolocations { get; set; } …Run Code Online (Sandbox Code Playgroud) 我在MVC5中创建了一个类,我想要内容的主要所有者,然后我想要一些内容的编辑器:
public class Content
{
public int ID { get; set; }
public IdentityUser Owner { get; set; }
public ICollection<IdentityUser> Editors { get; set; }
public string Title{ get; set; }
public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在数据库上下文中,我有以下代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Content>()
.HasOptional(c => c.Editors)
.WithRequired()
.WillCascadeOnDelete();
modelBuilder.Entity<Content>()
.HasRequired(c => c.Owner)
.WithOptional()
.WillCascadeOnDelete();
}
Run Code Online (Sandbox Code Playgroud)
我希望微软以IdentityUser这种方式实现对象,它可以在其他实体类型中使用,所以我可能做错了,因为当我尝试为Content实体类型创建一个控制器时,我得到以下内容错误:
EntityType 'IdentityUserLogin' has no key defined
EntityType 'IdentityUserRole' has no key defined
EntityType: EntitySet 'IdentityUserLogins' is …Run Code Online (Sandbox Code Playgroud) 在我们的Startup课程中,我配置了以下auth服务器选项:
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/v1/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
Run Code Online (Sandbox Code Playgroud)
在此之后,我们应该使用哪个选项来实际启用承载身份验证?互联网上似乎有两种变体.
选项1:
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
Run Code Online (Sandbox Code Playgroud)
选项2:
app.UseOAuthBearerTokens(OAuthServerOptions);
Run Code Online (Sandbox Code Playgroud)
我对它们进行了测试,结果是一样的.
这些选项有什么区别?我们什么时候应该使用哪个?
owin katana asp.net-identity asp.net-web-api2 asp.net-identity-2