如何在MVC3中公开身份验证令牌

时间:2012-11-05 22:40:06

标签: c# asp.net-mvc-3 repository membership

我目前在我的基本控制器中有我的身份验证令牌。因此,使用Membership API,我不得不在我的控制器中调用我的所有Repos。我希望在我的模型中接触这些回购,但需要这个代币。

我是否可以设置此令牌,以便在不影响所有用户的情况下更新每个请求?有没有办法只暴露这个,我的视图模型可以在某个基本模型中访问它并使用它调用repos?

这是我在Base Controller中的当前代码:

/// <summary>
/// Provide authentication credentials for the current user.
/// </summary>
protected IToken AuthenticatedUserToken
    {
        get
        {
            var userCred = (UsersCredential) this.Session [GlobalContext.UserCredentialsSessionKey];
            if ( userCred != null )
            {
                return userCred.UsersToken;
            }
            if (Request.IsAuthenticated)
            {
                var name = HttpContext.User.Identity.Name;
                var repository = new UserRepository(GlobalContext.ProvisioningApiServiceBase,
                                                               GlobalContext.WebServiceUserAuthenticationToken);
                var usersCredential = new UsersCredential
                {
                    UsersName = name,
                    UsersToken =
                        repository.GetAuthenticationTokenForAuthenticatedUser(name)
                };
                Session[GlobalContext.UserCredentialsSessionKey] = usersCredential;
                return usersCredential.UsersToken;
            }                
            return null;
        }
    }

protected RepositoryCollection _Repositories { get; set; }
protected RepositoryCollection Repositories
    {
        get
        {
            if (_Repositories == null)
            {
                _Repositories = new RepositoryCollection(this.AuthenticatedUserToken);
            }
            return _Repositories;
        }
    }

2 个答案:

答案 0 :(得分:0)

将受保护的属性的访问级别更改为public。受保护的方法和属性仅在类和它的祖先可见。

答案 1 :(得分:0)

如果我理解你的问题: 最好在操作中更新模型,而不是为模型提供对存储库的访问。如果你有一些基本模型,并且你想在几乎每个请求上填写一些属性而你不想复制过去的代码,你可以使用动作过滤器来为你设置这个属性。在这种情况下,您不需要在模型类中包含任何逻辑。 像this

这样的东西