ASP.NET MVC =>用户会话/ Cookie /与服务对话

时间:2011-11-25 16:07:12

标签: asp.net-mvc-2 c#-3.0

我不确定我是否做得对,但只是想知道如何处理系统中的登录用户。

要求

*用户将使用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将是一个强类型对象。

1 个答案:

答案 0 :(得分:0)

您可以将任何其他信息存储到身份验证Cookie的userData部分,如this example所示。然后,您将使用自定义主体,该主体将被注入到可在任何有HttpContext的地方访问的User属性中。因此,在控制器内部操作中,您将可以访问User属性(您可能有一个基本控制器,它会将强类型版本暴露给自定义主体),然后将信息传递给后台服务。