Я получаю ошибку CORS, когда я добавил UserManager - PullRequest
0 голосов
/ 07 мая 2019

Доступ к XMLHttpRequest в «http://localhost:5000//register' от источника» http://localhost:4200' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Я добавил в конструктор UserManager и SignInManager. Тогда я получаю ошибку.

Контроллер:

[Route("api/[controller]")]
[ApiController]
public class AccountController : BaseController
{
  List<User> users = new List<User>
    {
        new User { Login="admin", Password="12345", Role = "admin" },
        new User { Login="qwerty", Password="55555", Role = "user" }
    };

  public AccountController(IOptions<AWSEmailCredentials> options, UserManager<User> userManager, SignInManager<User> signInManager)
  {    }

  [HttpPost]
  public ActionResult Register([FromBody] User user)
  {
    if (ModelState.IsValid)
    {
    }
  }
}

Запуск:

public class Startup
{
public Startup(IConfiguration configuration)
{
  Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
  services.AddCors(options =>
  {
    options.AddPolicy("AllowOrigin",
        builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin());
  });

  services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
  {
    options.RequireHttpsMetadata = false;
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
      ValidateIssuer = true,
      ValidIssuer = AuthOptions.ISSUER,
      ValidateAudience = true,
      ValidAudience = AuthOptions.AUDIENCE,
      ValidateLifetime = true,

      IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
      ValidateIssuerSigningKey = true,
    };
  });

  services.AddRouting();
  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

  services.Configure<AWSCredentials>(Configuration.GetSection("AWSCredentials"));
  services.Configure<AWSEmailCredentials>(Configuration.GetSection("AWSEmailCredentials"));

  services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<DAL.ApplicationContext>();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
  }
  else
  {
    app.UseHsts();
  }

  app.UseCors("AllowOrigin");
  app.UseHttpsRedirection();
  app.UseStaticFiles();

  app.UseAuthentication();

  app.UseMvc();
}

}

Пользователь:

public class User : IdentityUser
{
  public int Id { get; set; }
  public string Login { get; set; }
  public string Password { get; set; }
  public string Role { get; set; }
  public string Email { get; set; }
}

DbContext:

public class ApplicationContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Book> Books { get; set; }

public ApplicationContext()
{
  Database.EnsureCreated();
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
  if (!optionsBuilder.IsConfigured)
  {
    optionsBuilder
        .UseSqlServer(@"Data Source=xxx;Initial Catalog=Books;User id=xx;Password=xxx;");
  }
}
}

Помогите, пожалуйста, решить эту проблему.

1 Ответ

0 голосов
/ 08 мая 2019

Я добавил класс:

public class IdentityContext : IdentityDbContext<User>
{
  public IdentityContext(DbContextOptions<IdentityContext> options)
      : base(options) { }

  protected override void OnModelCreating(ModelBuilder builder)
  {
    base.OnModelCreating(builder);
  }
}

А при запуске:

services.AddDbContext<IdentityContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<DAL.IdentityContext>().AddDefaultTokenProviders();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...