Abp.Core中扩展和使用AbpSession的方法
在自己的项目中,使用了Abp框架,但却没有采用原生的EF,自己把数据访问层改成了Npoco,这个组件应该是介于dapper和EF之间,可以用较少的sql,所以延续前期的代码,这样使用。
需要在abp框架中使用扩展AbpSession,参考 圣杰 文章 https://www.jianshu.com/p/930c10287e2a
但是在实例中,发现一个问题,因为没有使用zero,是自己实现的登录,因为对原理不太懂,一直没有搞清楚应该如何把登录信息写入。仔细读了上面的参考文件中的
Identity身份认证的文章,原理是明白了,但自己的代码却一直找不到实例。
关键的两个点,是一登录之后写入身份信息,按如下的方式定就可以,因为有许多的方法在core中是不一样的:
ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal();
ClaimsIdentity id = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
id.AddClaim(new Claim(ClaimTypes.NameIdentifier, "12234", ClaimValueTypes.String));
id.AddClaim(new Claim(ICTAbpClaimTypes.Name, staff.Name));
id.AddClaim(new Claim(AbpClaimTypes.Role, "vvv"));
claimsPrincipal.AddIdentity(id);
HttpContext.User = claimsPrincipal;
HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
claimsPrincipal,
new AuthenticationProperties { IsPersistent = true }
);
这样在方法之后,就可以取到想要的内容了。
但在后面,又发现一个问题,换一个action,取到的值还是空的,应该是ClaimsPrincipal 在不同的HttpContext是不一样的,感觉应该是在启动配置项中写的配置问题,却找不到正确的答案。最后重新建立一个新项目,测试发现,是在Startup文件中增加配置才行:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = new PathString("/Staff/Login");
});
还有
app.UseAuthentication();
这样就OK了。
网友评论