.NETコアで現在のユーザーIDをIDで取得しようとしています。新しいユーザーを作成してログインするように管理されていますが、同じユーザーIDでログインすると異なるGUIDが返されます。.netコアIDユーザーIDがデータベースと異なる場合
私はuserId
を外部キーとして保存する製品エンティティを持っています。新しい製品を追加しようとすると、userId
がユーザーテーブルにないため、エラーがスローされます。
しかし、私は新しいユーザーを登録し、すぐに新しい製品を追加します。製品を一覧表示します。 Hovewer、ログアウトし、同じユーザーと再度ログインすると、製品が表示されません。私がそれをデバッグすると、_userManager.GetUserId(User)
が異なる値を返すことが分かりました。
どうしてですか?
どうすればこの問題を解決できますか?
UPDATE 私のユーザー作成コード
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction(nameof(HomeController.Index), "Home");
}
マイユーザログインコード
ここvar result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
マイApplicationUserモデルクラス
ですpublic class ApplicationUser : IdentityUser
{
[Key]
[Column("TABLEID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public override string Id { get; set; }
[Required]
[Column("AD")]
public string Name { get; set; }
[Required]
[Column("SOYAD")]
public string Surname { get; set; }
[Required]
[Column("AKTIF")]
public bool IsActive { get; set; }
[Required]
[Column("SIL")]
public bool IsDeleted { get; set; }
[Required]
[Column("KAYITTARIHI")]
public DateTime RecordDate { get; set; }
public List<Vehicle> Vehicles { get; set; }
public List<VehicleImage> VehicleImages { get; set; }
public List<TransportAdvertise> TansportAdvertises { get; set; }
public List<TransportRequest> TransportRequests { get; set; }
}
ここでは私のDbContextある
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<Vehicle> Vehicles { get; set; }
public DbSet<VehicleImage> VehicleImages { get; set; }
public DbSet<TransportAdvertise> TransportAdvertises { get; set; }
public DbSet<TransportRequest> TransportRequests { get; set; }
public DbSet<TransportRoute> TransportRoutes { get; set; }
public DbSet<City> Cities { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
// Identity built-in models.
builder.Entity<IdentityUser>().ToTable("TBLKULLANICI");
builder.Entity<IdentityRole>().ToTable("TBLROL");
builder.Entity<IdentityUserRole<string>>().ToTable("TBLKULLANICIROL");
builder.Entity<IdentityRoleClaim<string>>().ToTable("TBLROLECLAIM");
builder.Entity<IdentityUserClaim<string>>().ToTable("TBLUSERCLAIM");
builder.Entity<IdentityUserLogin<string>>().ToTable("TBLUSERLOGIN");
builder.Entity<IdentityUserToken<string>>().ToTable("TBLUSERTOKEN");
// Custom models.
builder.Entity<Vehicle>().ToTable("TBLARAC");
builder.Entity<VehicleImage>().ToTable("TBLARACRESIM");
builder.Entity<TransportAdvertise>().ToTable("TBLNAKLIYEILAN");
builder.Entity<TransportRequest>().ToTable("TBLNAKLIYEISTEK");
builder.Entity<TransportRoute>().ToTable("TBLROTA");
builder.Entity<City>().ToTable("TBLSEHIR");
// FK mappings..
builder.Entity<Vehicle>()
.HasOne(v => v.User)
.WithMany(u => u.Vehicles)
.HasForeignKey(v => v.UserId)
.HasConstraintName("FK_VEHICLE_USER");
// Vehicle image model fks.
builder.Entity<VehicleImage>()
.HasOne(vi => vi.Vehicle)
.WithMany(v => v.Images)
.HasForeignKey(vi => vi.VehicleId)
.HasConstraintName("FK_VEHICLE_IMAGE_VEHICLE");
builder.Entity<VehicleImage>()
.HasOne(vi => vi.User)
.WithMany(u => u.VehicleImages)
.HasForeignKey(vi => vi.UserId)
.HasConstraintName("FK_VEHICLE_IMAGE_USER");
// TransportAdvertise model fks.
builder.Entity<TransportAdvertise>()
.HasOne(ta => ta.User)
.WithMany(u => u.TansportAdvertises)
.HasForeignKey(ta => ta.UserId)
.HasConstraintName("FK_TRANSPORT_ADS_USER");
builder.Entity<TransportAdvertise>()
.HasOne(ta => ta.Vehicle)
.WithMany(v => v.TransportAdvertises)
.HasForeignKey(ta => ta.VehicleId)
.HasConstraintName("FK_TRANSPORT_ADS_VEHICLE");
// TransportRequest model fks.
builder.Entity<TransportRequest>()
.HasOne(tr => tr.User)
.WithMany(u => u.TransportRequests)
.HasForeignKey(tr => tr.UserId)
.HasConstraintName("FK_TRANSPORT_RQST_USER");
builder.Entity<TransportRequest>()
.HasOne(tr => tr.TransportAdvertise)
.WithMany(ta => ta.TransportRequests)
.HasForeignKey(tr => tr.TransportAdvertiseId)
.HasConstraintName("FK_TRANSPORT_RQST_ADS");
// TransportRoute model fks.
builder.Entity<TransportRoute>()
.HasOne(tr => tr.City)
.WithMany(c => c.TransportRoutes)
.HasForeignKey(tr => tr.CityId)
.HasConstraintName("FK_TRANSPORT_ROUTE_CITY");
builder.Entity<TransportRoute>()
.HasOne(tr => tr.TransportAdvertise)
.WithMany(ta => ta.TransportRoutes)
.HasForeignKey(tr => tr.TransportAdvertiseId)
.HasConstraintName("FK_TRANSPORT_ROUTE_ADS");
}
車創造コード
[HttpPost]
public IActionResult AddNewVehicle(VehicleViewModel model)
{
var id = _userManager.GetUserId(User);
// model property check needs to be done before.
// vehicle table does not accept nulls.
var vehicle = new Vehicle()
{
Model = model.Model,
Capacity = model.Capacity,
Description = model.Description,
Year = model.Year,
Active = true,
Delete = false,
RecordDate = DateTime.Now,
UserId = id
};
_vehicleService.AddNew(vehicle);
return RedirectToAction("Index");
}
データを保存/取得するコードを表示できますか? – CodeNotFound
私のプロジェクトからコードスニペットを追加しました。ありがとうございました。 – oktykrk