gpt4 book ai didi

c# - 初学者在这里 : How does my Repository Layer know which user is logged in?

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:03 25 4
gpt4 key购买 nike

我知道这是一个 super 新手问题,但我很难理解这个问题。我在我的 n 层应用程序中实现 WebSecurity。我已将所有 WebSecurity 代码放在我的存储库层(最接近数据库层)。

我有这样的代码:

public bool LogIn(string userName, string password, bool rememberMe)
{
return WebSecurity.Login(userName, password, rememberMe);
}

public void LogOut()
{
WebSecurity.Logout();
}

WebSecurity 不需要知道登录的上下文 - 我传递参数。但是退出呢?有 10 个用户注销,这段代码如何知道要注销哪个用户?用户的上下文是否以某种方式一直向下推送到存储库层,从浏览器客户端到我的 API Controller ,通过我的服务层?

最佳答案

我会创建服务类来实现此功能。此服务层方法应注入(inject) IPrincipalIUserRepositoryIPrincipal 接口(interface)存储有关当前用户的信息。 HttpContext.Current.User 实现它。

public interface IAuthenticationService
{
bool SignIn(string userName, string password, bool rememberMe);
void SignOut();
}

public class WebSecurityAuthenticationService : IAuthenticationService
{
public WebSecurityAuthenticationService(IPrincipal user, IUserRepository userRepository)
{
}

....implementation...
}

您应该使用 IOC 容器来定义 IPrincialHttpContext.Current.User 之间以及 IUserRepository 与其基于数据库的实现之间的绑定(bind)。我推荐 Ninject,但选择权在你。

关于c# - 初学者在这里 : How does my Repository Layer know which user is logged in?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com