我不确定我是否做得对,但只是想知道如何处理系统中的登录用户。
要求
*用户将使用CompanyID,UserID和密码登录
*我们检查用户是否可以登录
*我们在Cookie中存储CompanyID和UserID,以便登录用户可以访问我们网站的区域,我们对需要公司和用户的数据库进行大量调用
问题:如何在整个服务中传达登录用户?
我的代码 - 所以你知道我在做什么:
public interface IUserSession
{
void SetClientStore(string LoginID, string Identifier); //store in cookie
void Logout();
string LoginID { get; private set; } //in cookie
string CompanyIdentifier { get; private set; } //in cookie
}
public interface IAuthorizationService
{
bool AuthenticateUser(string Identenfier, string LoginID, string password);
}
public class HandleAuthentication
{
private readonly IUserSession _session;
private readonly IAuthorizationService _auth;
public HandleAuthentication(IUserSession session,
IAuthorizationService auth)
{
_session = session;
_auth = auth;
}
public void AuthenticationUser(string Identenfier, string LoginID, string password)
{
if (_auth.AuthenticateUser(Identenfier, LoginID, password))
_session.SetClientStore(LoginID, Identenfier);
else
_session.Logout();
}
我应该在基本控制器中获取当前用户并将其传递到任何地方吗?所以我的所有服务都不依赖于接口??
因此,在我的基本控制器中,我创建了一个名为:
的属性public UserProfile MyProfile {get {return //something here;}}
然后将此属性发送到任何服务,在任何db调用等中使用此属性.UserProfile将是一个强类型对象。
答案 0 :(得分:0)
您可以将任何其他信息存储到身份验证Cookie的userData部分,如this example所示。然后,您将使用自定义主体,该主体将被注入到可在任何有HttpContext的地方访问的User属性中。因此,在控制器内部操作中,您将可以访问User属性(您可能有一个基本控制器,它会将强类型版本暴露给自定义主体),然后将信息传递给后台服务。