我有一个基于 ASP Core 1 的 Web 应用程序,带有 PostgreSql 数据存储。现在我想添加身份验证功能。我已经创建了具有授权的基本示例 mvc 项目,它可以很好地与 MsSql 服务器一起工作。但是 PostgreSql 呢?
首先我创建了具有相同模式的数据库(sql 是通过 dnx ef migrations script
生成的,代码是用 pg 风格更新的)。然后我用 Postgres 配置了 EF
services.AddEntityFramework()
.AddNpgsql()
.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"]));
当我尝试注册为新用户时,出现错误 42P01: relation\"AspNetUsers\"does not exist
。我已经用双引号将表名括起来,但这没有帮助。我无权访问默认身份验证模型,也无法将名称属性添加到表名称和字段名称。
所以,我的问题是:
我的示例项目有什么问题,为什么我无法访问数据库?
更全局化。使用 ASP Core 1 + PostgreSql 组织授权和身份验证的最佳方式是什么?我不需要所有 ASP 身份验证功能,我只需要角色,我想要基于 bigint 的 ID 并且我想要扩展用户模型(表)。
注意:我使用 EF7。
最佳答案
所以我第一个问题的答案是错误的数据库模式。对于对模式感兴趣的人,我得到了完整的 pg sql 代码,但我的第二个问题仍然未解决。
CREATE TABLE public."AspNetRoles" (
"Id" character varying(450) NOT NULL,
"ConcurrencyStamp" text,
"Name" character varying(256),
"NormalizedName" character varying(256),
CONSTRAINT pk_identityrole PRIMARY KEY ("Id")
);
CREATE TABLE public."AspNetUsers" (
"Id" character varying(450) NOT NULL,
"AccessFailedCount" integer NOT NULL,
"ConcurrencyStamp" text,
"Email" character varying(256),
"EmailConfirmed" boolean NOT NULL,
"LockoutEnabled" boolean NOT NULL,
"LockoutEnd" timestamp without time zone,
"NormalizedEmail" character varying(256),
"NormalizedUserName" character varying(256),
"PasswordHash" text,
"PhoneNumber" text,
"PhoneNumberConfirmed" boolean NOT NULL,
"SecurityStamp" text,
"TwoFactorEnabled" boolean NOT NULL,
"UserName" character varying(256),
CONSTRAINT pk_applicationuser PRIMARY KEY ("Id")
);
CREATE TABLE public."AspNetRoleClaims" (
"Id" serial NOT NULL,
"ClaimType" text,
"ClaimValue" text,
"RoleId" character varying(450),
CONSTRAINT pk_identityroleclaim PRIMARY KEY ("Id"),
CONSTRAINT fk_identityroleclaim_identityrole_roleid FOREIGN KEY ("RoleId")
REFERENCES public."AspNetRoles" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE public."AspNetUserClaims" (
"Id" serial NOT NULL,
"ClaimType" text,
"ClaimValue" text,
"UserId" character varying(450),
CONSTRAINT pk_identityuserclaim PRIMARY KEY ("Id"),
CONSTRAINT fk_identityuserclaim_applicationuser_userid FOREIGN KEY ("UserId")
REFERENCES public."AspNetUsers" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE public."AspNetUserLogins" (
"LoginProvider" character varying(450) NOT NULL,
"ProviderKey" character varying(450) NOT NULL,
"ProviderDisplayName" text,
"UserId" character varying(450),
CONSTRAINT pk_identityuserlogin PRIMARY KEY ("LoginProvider", "ProviderKey"),
CONSTRAINT fk_identityuserlogin_applicationuser_userid FOREIGN KEY ("UserId")
REFERENCES public."AspNetUsers" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE public."AspNetUserRoles" (
"UserId" character varying(450) NOT NULL,
"RoleId" character varying(450) NOT NULL,
CONSTRAINT pk_identityuserrole PRIMARY KEY ("UserId", "RoleId"),
CONSTRAINT fk_identityuserrole_applicationuser_userid FOREIGN KEY ("UserId")
REFERENCES public."AspNetUsers" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_identityuserrole_identityrole_roleid FOREIGN KEY ("RoleId")
REFERENCES public."AspNetRoles" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
关于asp.net - 带有 PostgreSql 的 ASP Core 1。授权和认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887179/