Abp.Core中扩展和使用AbpSession

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了。

你可能感兴趣的:(Abp.Core中扩展和使用AbpSession)