我已经在使用context_A
的网站上设置了授权-现在我需要做的就是将[Authorize]
属性添加到任何控制器的顶部,以确保用户已登录使用它。
我已经在使用另一个上下文context_B
的一个特定控制器上完成了此操作-授权仍然有效,但现在我想知道如何在使用不同上下文的控制器上访问授权用户的详细信息上下文。
using Microsoft.AspNetCore.Authorization;
namespace projectA.Controllers
{
[Authorize] // this is authorised using contextA
public class SomeController : Controller
{
private readonly ContextB _context;
public SomeController(ContextB context) // I pass in completely different context here
{
_context = context;
}
}
}
我想在控制器中访问auth上下文,例如
`string x = AuthorisationContext.CurrentUser.Email`
但是我不知道使用[Authorize]时幕后发生了什么-我不确定它在何时何处使用contextA推送和提取数据
我猜测出于种种原因,我可能应该在同一上下文中完成授权,但是即使我只是添加了[Authorize]
,也有可能将当前授权用户的详细信息提取到控制器中属性?
答案 0 :(得分:2)
从Controller基类中,您可以从IClaimsPrincipal
属性中获取User
。可以从数据库的用户实体获取其他字段:
1。使用依赖注入获取用户管理器
private UserManager<IdentityUser> _userManager;
private readonly ContextB _context;
public SomeController(ContextB context, UserManager<IdentityUser> userManager)
{
_context = context;
_userManager = userManager;
}
2。并使用它:
public async void GetUserInfo()
{
var user = await _userManager.GetUserAsync(User);
var email = user.Email;
}