Asp.net Mvc 6登录后立即获得用户声明

adr*_* h. 5 asp.net security claims-based-identity asp.net-core-mvc

在Asp.net Mvc 6网站上,我定制了开箱即用的功能,AccountController以便userManager.CreateAsync()在注册前添加自定义声明,

  • 使用本地帐户(电子邮件/密码),在Register()控制器的方法中
  • 与外部提供商(谷歌/ Facebook),在ExternalLoginConfirmation()控制器的

现在,我想做的是,在用户登录后立即执行

  • Login()调用signInManager.PasswordSignInAsync()和之后的方法中
  • ExternalLoginCallback()调用后的方法中signInManager.ExternalLoginSignInAsync()

...检索该声明,理想情况下无需访问数据库即可获取用户.

我注意到如果我在登录后直接看到User,则Claims集合为空.但是,如果我在后续控制器操作中查看它,则会填充Claims集合并在其中包含我的自定义声明.

问题是,为什么登录后不会立即填写索赔(我猜登录代码不会刷新CurrentPrincipal?)并且在登录后直接检查另一个地方以获取索赔而不会点击DB?

Daw*_*ski 1

您可以尝试实现自己的 ApplicationUserStore 并填充您需要的用户(或用作身份实体的实体)的任何属性。